;
(function () {
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
  function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
  function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); Object.defineProperty(subClass, "prototype", { writable: false }); if (superClass) _setPrototypeOf(subClass, superClass); }
  function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
  function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } else if (call !== void 0) { throw new TypeError("Derived constructors may only return object or undefined"); } return _assertThisInitialized(self); }
  function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
  function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
  function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); } }
  function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
  function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
  function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
  function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
  function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
  function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
  function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
  function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
  System.register([], function (exports, module) {
    'use strict';

    var __vite_style__ = document.createElement('style');
    __vite_style__.textContent = "@font-face {\n    font-family:\"sonyBold\";\n    src: url('" + new URL('SL-Simplified-Bold.otf', module.meta.url).href + "');\n}\n\n@font-face {\n    font-family:\"sonyLight\";\n    src: url('" + new URL('SL-Simplified-Light.otf', module.meta.url).href + "');\n}\n\n@font-face {\n    font-family:\"sonyRegular\";\n    src: url('" + new URL('SL-Simplified-Regular.otf', module.meta.url).href + "');\n}\n\nbody {\n    font-family: \"sonyRegular\";\n}/*\n! tailwindcss v3.3.2 | MIT License | https://tailwindcss.com\n*//*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n  box-sizing: border-box; /* 1 */\n  border-width: 0; /* 2 */\n  border-style: solid; /* 2 */\n  border-color: #e5e7eb; /* 2 */\n}\n\n::before,\n::after {\n  --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n*/\n\nhtml {\n  line-height: 1.5; /* 1 */\n  -webkit-text-size-adjust: 100%; /* 2 */ /* 3 */\n  tab-size: 4; /* 3 */\n  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\"; /* 4 */\n  -webkit-font-feature-settings: normal;\n          font-feature-settings: normal; /* 5 */\n  font-variation-settings: normal; /* 6 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n  margin: 0; /* 1 */\n  line-height: inherit; /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n  height: 0; /* 1 */\n  color: inherit; /* 2 */\n  border-top-width: 1px; /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-size: inherit;\n  font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n  color: inherit;\n  text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font family by default.\n2. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n  font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n  text-indent: 0; /* 1 */\n  border-color: inherit; /* 2 */\n  border-collapse: collapse; /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: inherit; /* 1 */\n  font-size: 100%; /* 1 */\n  font-weight: inherit; /* 1 */\n  line-height: inherit; /* 1 */\n  color: inherit; /* 1 */\n  margin: 0; /* 2 */\n  padding: 0; /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n  text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\n[type='button'],\n[type='reset'],\n[type='submit'] {\n  -webkit-appearance: button; /* 1 */\n  background-color: transparent; /* 2 */\n  background-image: none; /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n  outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n  box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n  vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n  display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n  margin: 0;\n}\n\nfieldset {\n  margin: 0;\n  padding: 0;\n}\n\nlegend {\n  padding: 0;\n}\n\nol,\nul,\nmenu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n  resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-webkit-input-placeholder, textarea::-webkit-input-placeholder {\n  opacity: 1; /* 1 */\n  color: #9ca3af; /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n  opacity: 1; /* 1 */\n  color: #9ca3af; /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n  cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n:disabled {\n  cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n   This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n  display: block; /* 1 */\n  vertical-align: middle; /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n  max-width: 100%;\n  height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n[hidden] {\n  display: none;\n}\n  *,\n  ::before,\n  ::after {\n    box-sizing: inherit;\n    --tw-border-spacing-x: 0;\n    --tw-border-spacing-y: 0;\n    --tw-translate-x: 0;\n    --tw-translate-y: 0;\n    --tw-rotate: 0;\n    --tw-skew-x: 0;\n    --tw-skew-y: 0;\n    --tw-scale-x: 1;\n    --tw-scale-y: 1;\n    --tw-pan-x:  ;\n    --tw-pan-y:  ;\n    --tw-pinch-zoom:  ;\n    --tw-scroll-snap-strictness: proximity;\n    --tw-gradient-from-position:  ;\n    --tw-gradient-via-position:  ;\n    --tw-gradient-to-position:  ;\n    --tw-ordinal:  ;\n    --tw-slashed-zero:  ;\n    --tw-numeric-figure:  ;\n    --tw-numeric-spacing:  ;\n    --tw-numeric-fraction:  ;\n    --tw-ring-inset:  ;\n    --tw-ring-offset-width: 0px;\n    --tw-ring-offset-color: #fff;\n    --tw-ring-color: rgb(59 130 246 / 0.5);\n    --tw-ring-offset-shadow: 0 0 #0000;\n    --tw-ring-shadow: 0 0 #0000;\n    --tw-shadow: 0 0 #0000;\n    --tw-shadow-colored: 0 0 #0000;\n    --tw-blur:  ;\n    --tw-brightness:  ;\n    --tw-contrast:  ;\n    --tw-grayscale:  ;\n    --tw-hue-rotate:  ;\n    --tw-invert:  ;\n    --tw-saturate:  ;\n    --tw-sepia:  ;\n    --tw-drop-shadow:  ;\n    --tw-backdrop-blur:  ;\n    --tw-backdrop-brightness:  ;\n    --tw-backdrop-contrast:  ;\n    --tw-backdrop-grayscale:  ;\n    --tw-backdrop-hue-rotate:  ;\n    --tw-backdrop-invert:  ;\n    --tw-backdrop-opacity:  ;\n    --tw-backdrop-saturate:  ;\n    --tw-backdrop-sepia:  ;\n  }\n\n::-webkit-backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n\n::backdrop {\n  --tw-border-spacing-x: 0;\n  --tw-border-spacing-y: 0;\n  --tw-translate-x: 0;\n  --tw-translate-y: 0;\n  --tw-rotate: 0;\n  --tw-skew-x: 0;\n  --tw-skew-y: 0;\n  --tw-scale-x: 1;\n  --tw-scale-y: 1;\n  --tw-pan-x:  ;\n  --tw-pan-y:  ;\n  --tw-pinch-zoom:  ;\n  --tw-scroll-snap-strictness: proximity;\n  --tw-gradient-from-position:  ;\n  --tw-gradient-via-position:  ;\n  --tw-gradient-to-position:  ;\n  --tw-ordinal:  ;\n  --tw-slashed-zero:  ;\n  --tw-numeric-figure:  ;\n  --tw-numeric-spacing:  ;\n  --tw-numeric-fraction:  ;\n  --tw-ring-inset:  ;\n  --tw-ring-offset-width: 0px;\n  --tw-ring-offset-color: #fff;\n  --tw-ring-color: rgb(59 130 246 / 0.5);\n  --tw-ring-offset-shadow: 0 0 #0000;\n  --tw-ring-shadow: 0 0 #0000;\n  --tw-shadow: 0 0 #0000;\n  --tw-shadow-colored: 0 0 #0000;\n  --tw-blur:  ;\n  --tw-brightness:  ;\n  --tw-contrast:  ;\n  --tw-grayscale:  ;\n  --tw-hue-rotate:  ;\n  --tw-invert:  ;\n  --tw-saturate:  ;\n  --tw-sepia:  ;\n  --tw-drop-shadow:  ;\n  --tw-backdrop-blur:  ;\n  --tw-backdrop-brightness:  ;\n  --tw-backdrop-contrast:  ;\n  --tw-backdrop-grayscale:  ;\n  --tw-backdrop-hue-rotate:  ;\n  --tw-backdrop-invert:  ;\n  --tw-backdrop-opacity:  ;\n  --tw-backdrop-saturate:  ;\n  --tw-backdrop-sepia:  ;\n}\n.tw-absolute {\n  position: absolute;\n}\n.tw-relative {\n  position: relative;\n}\n.tw-sticky {\n  position: -webkit-sticky;\n  position: sticky;\n}\n.-tw-left-\\[7px\\] {\n  left: -7px;\n}\n.-tw-right-3 {\n  right: -0.75rem;\n}\n.-tw-right-6 {\n  right: -1.5rem;\n}\n.-tw-top-\\[7px\\] {\n  top: -7px;\n}\n.tw-bottom-0 {\n  bottom: 0px;\n}\n.tw-bottom-4 {\n  bottom: 1rem;\n}\n.tw-bottom-\\[10\\%\\] {\n  bottom: 10%;\n}\n.tw-bottom-\\[18\\%\\] {\n  bottom: 18%;\n}\n.tw-bottom-\\[24\\%\\] {\n  bottom: 24%;\n}\n.tw-bottom-\\[27\\%\\] {\n  bottom: 27%;\n}\n.tw-left-1\\/2 {\n  left: 50%;\n}\n.tw-left-2 {\n  left: 0.5rem;\n}\n.tw-left-\\[34\\%\\] {\n  left: 34%;\n}\n.tw-right-0 {\n  right: 0px;\n}\n.tw-right-12 {\n  right: 3rem;\n}\n.tw-right-8 {\n  right: 2rem;\n}\n.tw-right-\\[15\\%\\] {\n  right: 15%;\n}\n.tw-right-\\[23\\%\\] {\n  right: 23%;\n}\n.tw-right-\\[30\\%\\] {\n  right: 30%;\n}\n.tw-right-\\[5\\%\\] {\n  right: 5%;\n}\n.tw-top-0 {\n  top: 0px;\n}\n.tw-top-1\\/2 {\n  top: 50%;\n}\n.tw-top-4 {\n  top: 1rem;\n}\n.tw-z-10 {\n  z-index: 10;\n}\n.tw-mx-auto {\n  margin-left: auto;\n  margin-right: auto;\n}\n.tw-my-1 {\n  margin-top: 0.25rem;\n  margin-bottom: 0.25rem;\n}\n.tw-my-6 {\n  margin-top: 1.5rem;\n  margin-bottom: 1.5rem;\n}\n.tw-mb-12 {\n  margin-bottom: 3rem;\n}\n.tw-mb-6 {\n  margin-bottom: 1.5rem;\n}\n.tw-mb-8 {\n  margin-bottom: 2rem;\n}\n.tw-ml-2 {\n  margin-left: 0.5rem;\n}\n.tw-ml-\\[13\\%\\] {\n  margin-left: 13%;\n}\n.tw-mt-10 {\n  margin-top: 2.5rem;\n}\n.tw-mt-12 {\n  margin-top: 3rem;\n}\n.tw-mt-2 {\n  margin-top: 0.5rem;\n}\n.tw-mt-4 {\n  margin-top: 1rem;\n}\n.tw-mt-6 {\n  margin-top: 1.5rem;\n}\n.tw-mt-8 {\n  margin-top: 2rem;\n}\n.tw-inline-block {\n  display: inline-block;\n}\n.tw-flex {\n  display: flex;\n}\n.tw-h-\\[1px\\] {\n  height: 1px;\n}\n.tw-h-\\[20px\\] {\n  height: 20px;\n}\n.tw-w-1\\/2 {\n  width: 50%;\n}\n.tw-w-1\\/3 {\n  width: 33.333333%;\n}\n.tw-w-1\\/4 {\n  width: 25%;\n}\n.tw-w-1\\/5 {\n  width: 20%;\n}\n.tw-w-2\\/3 {\n  width: 66.666667%;\n}\n.tw-w-3\\/4 {\n  width: 75%;\n}\n.tw-w-3\\/5 {\n  width: 60%;\n}\n.tw-w-\\[10vw\\] {\n  width: 10vw;\n}\n.tw-w-\\[11vw\\] {\n  width: 11vw;\n}\n.tw-w-\\[120px\\] {\n  width: 120px;\n}\n.tw-w-\\[12vw\\] {\n  width: 12vw;\n}\n.tw-w-\\[18\\%\\] {\n  width: 18%;\n}\n.tw-w-\\[20px\\] {\n  width: 20px;\n}\n.tw-w-\\[28\\%\\] {\n  width: 28%;\n}\n.tw-w-\\[30\\%\\] {\n  width: 30%;\n}\n.tw-w-\\[44\\%\\] {\n  width: 44%;\n}\n.tw-w-\\[58\\%\\] {\n  width: 58%;\n}\n.tw-w-\\[72\\%\\] {\n  width: 72%;\n}\n.tw-w-\\[8vw\\] {\n  width: 8vw;\n}\n.tw-w-\\[90\\%\\] {\n  width: 90%;\n}\n.tw-w-\\[94\\%\\] {\n  width: 94%;\n}\n.tw-w-full {\n  width: 100%;\n}\n.tw-max-w-3xl {\n  max-width: 48rem;\n}\n.tw-flex-1 {\n  flex: 1 1 0%;\n}\n.tw-scale-90 {\n  --tw-scale-x: .9;\n  --tw-scale-y: .9;\n  -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n          transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n.tw-flex-wrap {\n  flex-wrap: wrap;\n}\n.tw-items-center {\n  align-items: center;\n}\n.tw-justify-center {\n  justify-content: center;\n}\n.tw-justify-between {\n  justify-content: space-between;\n}\n.tw-justify-evenly {\n  justify-content: space-evenly;\n}\n.tw-overflow-hidden {\n  overflow: hidden;\n}\n.tw-rounded-\\[50\\%\\] {\n  border-radius: 50%;\n}\n.tw-rounded-full {\n  border-radius: 9999px;\n}\n.tw-rounded-xl {\n  border-radius: 0.75rem;\n}\n.tw-rounded-e-full {\n  border-start-end-radius: 9999px;\n  border-end-end-radius: 9999px;\n}\n.tw-border {\n  border-width: 1px;\n}\n.tw-border-slate-600 {\n  --tw-border-opacity: 1;\n  border-color: rgb(71 85 105 / var(--tw-border-opacity));\n}\n.tw-border-slate-900 {\n  --tw-border-opacity: 1;\n  border-color: rgb(15 23 42 / var(--tw-border-opacity));\n}\n.tw-border-zinc-500 {\n  --tw-border-opacity: 1;\n  border-color: rgb(113 113 122 / var(--tw-border-opacity));\n}\n.tw-bg-green-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(34 197 94 / var(--tw-bg-opacity));\n}\n.tw-bg-orange-500 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(249 115 22 / var(--tw-bg-opacity));\n}\n.tw-bg-slate-600 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(71 85 105 / var(--tw-bg-opacity));\n}\n.tw-bg-violet-300 {\n  --tw-bg-opacity: 1;\n  background-color: rgb(196 181 253 / var(--tw-bg-opacity));\n}\n.tw-bg-white {\n  --tw-bg-opacity: 1;\n  background-color: rgb(255 255 255 / var(--tw-bg-opacity));\n}\n.tw-p-2 {\n  padding: 0.5rem;\n}\n.tw-p-4 {\n  padding: 1rem;\n}\n.tw-p-6 {\n  padding: 1.5rem;\n}\n.tw-px-2 {\n  padding-left: 0.5rem;\n  padding-right: 0.5rem;\n}\n.tw-px-4 {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n.tw-py-1 {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n}\n.tw-py-12 {\n  padding-top: 3rem;\n  padding-bottom: 3rem;\n}\n.tw-py-2 {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n}\n.tw-py-20 {\n  padding-top: 5rem;\n  padding-bottom: 5rem;\n}\n.tw-py-4 {\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n.tw-pb-12 {\n  padding-bottom: 3rem;\n}\n.tw-pb-16 {\n  padding-bottom: 4rem;\n}\n.tw-pb-2 {\n  padding-bottom: 0.5rem;\n}\n.tw-pb-24 {\n  padding-bottom: 6rem;\n}\n.tw-pb-4 {\n  padding-bottom: 1rem;\n}\n.tw-pb-6 {\n  padding-bottom: 1.5rem;\n}\n.tw-pb-8 {\n  padding-bottom: 2rem;\n}\n.tw-pt-12 {\n  padding-top: 3rem;\n}\n.tw-pt-2 {\n  padding-top: 0.5rem;\n}\n.tw-pt-4 {\n  padding-top: 1rem;\n}\n.tw-pt-6 {\n  padding-top: 1.5rem;\n}\n.tw-pt-8 {\n  padding-top: 2rem;\n}\n.tw-text-left {\n  text-align: left;\n}\n.tw-text-center {\n  text-align: center;\n}\n.tw-text-4xl {\n  font-size: 2.25rem;\n  line-height: 2.5rem;\n}\n.tw-text-\\[14px\\] {\n  font-size: 14px;\n}\n.tw-text-\\[16px\\] {\n  font-size: 16px;\n}\n.tw-text-\\[18px\\] {\n  font-size: 18px;\n}\n.tw-text-\\[28px\\] {\n  font-size: 28px;\n}\n.tw-text-base {\n  font-size: 1rem;\n  line-height: 1.5rem;\n}\n.tw-text-lg {\n  font-size: 1.125rem;\n  line-height: 1.75rem;\n}\n.tw-text-sm {\n  font-size: 0.875rem;\n  line-height: 1.25rem;\n}\n.tw-text-xl {\n  font-size: 1.25rem;\n  line-height: 1.75rem;\n}\n.tw-leading-10 {\n  line-height: 2.5rem;\n}\n.tw-leading-5 {\n  line-height: 1.25rem;\n}\n.tw-leading-6 {\n  line-height: 1.5rem;\n}\n.tw-leading-8 {\n  line-height: 2rem;\n}\n.tw-tracking-normal {\n  letter-spacing: 0em;\n}\n.tw-tracking-widest {\n  letter-spacing: 0.1em;\n}\n.tw-text-orange-500 {\n  --tw-text-opacity: 1;\n  color: rgb(249 115 22 / var(--tw-text-opacity));\n}\n.tw-text-zinc-500 {\n  --tw-text-opacity: 1;\n  color: rgb(113 113 122 / var(--tw-text-opacity));\n}\n.tw-text-zinc-600 {\n  --tw-text-opacity: 1;\n  color: rgb(82 82 91 / var(--tw-text-opacity));\n}\n.tw-text-zinc-700 {\n  --tw-text-opacity: 1;\n  color: rgb(63 63 70 / var(--tw-text-opacity));\n}\n.tw-text-zinc-800 {\n  --tw-text-opacity: 1;\n  color: rgb(39 39 42 / var(--tw-text-opacity));\n}\n.tw-underline {\n  text-decoration-line: underline;\n}\n.tw-underline-offset-4 {\n  text-underline-offset: 4px;\n}\n#soundbar-page *,\n#soundbar-page ::before,\n#soundbar-page ::after {\n  box-sizing: border-box;\n}\n@media (min-width: 768px) {\n\n  .md\\:-tw-bottom-4 {\n    bottom: -1rem;\n  }\n\n  .md\\:tw-left-1\\/3 {\n    left: 33.333333%;\n  }\n\n  .md\\:tw-right-\\[8\\%\\] {\n    right: 8%;\n  }\n\n  .md\\:tw-my-4 {\n    margin-top: 1rem;\n    margin-bottom: 1rem;\n  }\n\n  .md\\:tw-w-1\\/2 {\n    width: 50%;\n  }\n\n  .md\\:tw-w-\\[220px\\] {\n    width: 220px;\n  }\n\n  .md\\:tw-w-\\[42\\%\\] {\n    width: 42%;\n  }\n\n  .md\\:tw-py-4 {\n    padding-top: 1rem;\n    padding-bottom: 1rem;\n  }\n\n  .md\\:tw-py-8 {\n    padding-top: 2rem;\n    padding-bottom: 2rem;\n  }\n\n  .md\\:tw-pt-8 {\n    padding-top: 2rem;\n  }\n\n  .md\\:tw-text-center {\n    text-align: center;\n  }\n\n  .md\\:tw-text-2xl {\n    font-size: 1.5rem;\n    line-height: 2rem;\n  }\n\n  .md\\:tw-text-\\[14px\\] {\n    font-size: 14px;\n  }\n\n  .md\\:tw-text-\\[16px\\] {\n    font-size: 16px;\n  }\n\n  .md\\:tw-text-lg {\n    font-size: 1.125rem;\n    line-height: 1.75rem;\n  }\n\n  .md\\:tw-text-xl {\n    font-size: 1.25rem;\n    line-height: 1.75rem;\n  }\n}\n@media (min-width: 1024px) {\n\n  .lg\\:tw-w-\\[43\\%\\] {\n    width: 43%;\n  }\n\n  .lg\\:tw-text-base {\n    font-size: 1rem;\n    line-height: 1.5rem;\n  }\n\n  .lg\\:tw-text-lg {\n    font-size: 1.125rem;\n    line-height: 1.75rem;\n  }\n\n  .lg\\:tw-text-xs {\n    font-size: 0.75rem;\n    line-height: 1rem;\n  }\n\n  .lg\\:tw-leading-8 {\n    line-height: 2rem;\n  }\n}\n/**\n * Swiper 4.5.1\n * Most modern mobile touch slider and framework with hardware accelerated transitions\n * http://www.idangero.us/swiper/\n *\n * Copyright 2014-2019 Vladimir Kharlampidi\n *\n * Released under the MIT License\n *\n * Released on: September 13, 2019\n */\n.swiper-container {\n  margin-left: auto;\n  margin-right: auto;\n  position: relative;\n  overflow: hidden;\n  list-style: none;\n  padding: 0;\n  /* Fix of Webkit flickering */\n  z-index: 1;\n}\n.swiper-container-no-flexbox .swiper-slide {\n  float: left;\n}\n.swiper-container-vertical > .swiper-wrapper {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -webkit-flex-direction: column;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n.swiper-wrapper {\n  position: relative;\n  width: 100%;\n  height: 100%;\n  z-index: 1;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-transition-property: -webkit-transform;\n  transition-property: -webkit-transform;\n  -o-transition-property: transform;\n  transition-property: transform;\n  transition-property: transform, -webkit-transform;\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.swiper-container-android .swiper-slide,\n.swiper-wrapper {\n  -webkit-transform: translate3d(0px, 0, 0);\n  transform: translate3d(0px, 0, 0);\n}\n.swiper-container-multirow > .swiper-wrapper {\n  -webkit-flex-wrap: wrap;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n}\n.swiper-container-free-mode > .swiper-wrapper {\n  -webkit-transition-timing-function: ease-out;\n  -o-transition-timing-function: ease-out;\n  transition-timing-function: ease-out;\n  margin: 0 auto;\n}\n.swiper-slide {\n  -webkit-flex-shrink: 0;\n  -ms-flex-negative: 0;\n  flex-shrink: 0;\n  width: 100%;\n  height: 100%;\n  position: relative;\n  -webkit-transition-property: -webkit-transform;\n  transition-property: -webkit-transform;\n  -o-transition-property: transform;\n  transition-property: transform;\n  transition-property: transform, -webkit-transform;\n}\n.swiper-slide-invisible-blank {\n  visibility: hidden;\n}\n/* Auto Height */\n.swiper-container-autoheight,\n.swiper-container-autoheight .swiper-slide {\n  height: auto;\n}\n.swiper-container-autoheight .swiper-wrapper {\n  -webkit-box-align: start;\n  -webkit-align-items: flex-start;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -webkit-transition-property: height, -webkit-transform;\n  transition-property: height, -webkit-transform;\n  -o-transition-property: transform, height;\n  transition-property: transform, height;\n  transition-property: transform, height, -webkit-transform;\n}\n/* 3D Effects */\n.swiper-container-3d {\n  -webkit-perspective: 1200px;\n  perspective: 1200px;\n}\n.swiper-container-3d .swiper-wrapper,\n.swiper-container-3d .swiper-slide,\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom,\n.swiper-container-3d .swiper-cube-shadow {\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n.swiper-container-3d .swiper-slide-shadow-left,\n.swiper-container-3d .swiper-slide-shadow-right,\n.swiper-container-3d .swiper-slide-shadow-top,\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  pointer-events: none;\n  z-index: 10;\n}\n.swiper-container-3d .swiper-slide-shadow-left {\n  background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));\n  background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n  background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n  background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-container-3d .swiper-slide-shadow-right {\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n  background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n  background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-container-3d .swiper-slide-shadow-top {\n  background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));\n  background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n  background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n  background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n.swiper-container-3d .swiper-slide-shadow-bottom {\n  background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));\n  background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n  background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n  background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));\n}\n/* IE10 Windows Phone 8 Fixes */\n.swiper-container-wp8-horizontal,\n.swiper-container-wp8-horizontal > .swiper-wrapper {\n  -ms-touch-action: pan-y;\n  touch-action: pan-y;\n}\n.swiper-container-wp8-vertical,\n.swiper-container-wp8-vertical > .swiper-wrapper {\n  -ms-touch-action: pan-x;\n  touch-action: pan-x;\n}\n.swiper-button-prev,\n.swiper-button-next {\n  position: absolute;\n  top: 50%;\n  width: 27px;\n  height: 44px;\n  margin-top: -22px;\n  z-index: 10;\n  cursor: pointer;\n  background-size: 27px 44px;\n  background-position: center;\n  background-repeat: no-repeat;\n}\n.swiper-button-prev.swiper-button-disabled,\n.swiper-button-next.swiper-button-disabled {\n  opacity: 0.35;\n  cursor: auto;\n  pointer-events: none;\n}\n.swiper-button-prev,\n.swiper-container-rtl .swiper-button-next {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  left: 10px;\n  right: auto;\n}\n.swiper-button-next,\n.swiper-container-rtl .swiper-button-prev {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E\");\n  right: 10px;\n  left: auto;\n}\n.swiper-button-prev.swiper-button-white,\n.swiper-container-rtl .swiper-button-next.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\");\n}\n.swiper-button-next.swiper-button-white,\n.swiper-container-rtl .swiper-button-prev.swiper-button-white {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E\");\n}\n.swiper-button-prev.swiper-button-black,\n.swiper-container-rtl .swiper-button-next.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\");\n}\n.swiper-button-next.swiper-button-black,\n.swiper-container-rtl .swiper-button-prev.swiper-button-black {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E\");\n}\n.swiper-button-lock {\n  display: none;\n}\n.swiper-pagination {\n  position: absolute;\n  text-align: center;\n  -webkit-transition: 300ms opacity;\n  -o-transition: 300ms opacity;\n  transition: 300ms opacity;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  z-index: 10;\n}\n.swiper-pagination.swiper-pagination-hidden {\n  opacity: 0;\n}\n/* Common Styles */\n.swiper-pagination-fraction,\n.swiper-pagination-custom,\n.swiper-container-horizontal > .swiper-pagination-bullets {\n  bottom: 10px;\n  left: 0;\n  width: 100%;\n}\n/* Bullets */\n.swiper-pagination-bullets-dynamic {\n  overflow: hidden;\n  font-size: 0;\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n  -webkit-transform: scale(0.33);\n  -ms-transform: scale(0.33);\n  transform: scale(0.33);\n  position: relative;\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active {\n  -webkit-transform: scale(1);\n  -ms-transform: scale(1);\n  transform: scale(1);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-main {\n  -webkit-transform: scale(1);\n  -ms-transform: scale(1);\n  transform: scale(1);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev {\n  -webkit-transform: scale(0.66);\n  -ms-transform: scale(0.66);\n  transform: scale(0.66);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-prev-prev {\n  -webkit-transform: scale(0.33);\n  -ms-transform: scale(0.33);\n  transform: scale(0.33);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next {\n  -webkit-transform: scale(0.66);\n  -ms-transform: scale(0.66);\n  transform: scale(0.66);\n}\n.swiper-pagination-bullets-dynamic .swiper-pagination-bullet-active-next-next {\n  -webkit-transform: scale(0.33);\n  -ms-transform: scale(0.33);\n  transform: scale(0.33);\n}\n.swiper-pagination-bullet {\n  width: 8px;\n  height: 8px;\n  display: inline-block;\n  border-radius: 100%;\n  background: #000;\n  opacity: 0.2;\n}\nbutton.swiper-pagination-bullet {\n  border: none;\n  margin: 0;\n  padding: 0;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n.swiper-pagination-clickable .swiper-pagination-bullet {\n  cursor: pointer;\n}\n.swiper-pagination-bullet-active {\n  opacity: 1;\n  background: #007aff;\n}\n.swiper-container-vertical > .swiper-pagination-bullets {\n  right: 10px;\n  top: 50%;\n  -webkit-transform: translate3d(0px, -50%, 0);\n  transform: translate3d(0px, -50%, 0);\n}\n.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {\n  margin: 6px 0;\n  display: block;\n}\n.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\n  top: 50%;\n  -webkit-transform: translateY(-50%);\n  -ms-transform: translateY(-50%);\n  transform: translateY(-50%);\n  width: 8px;\n}\n.swiper-container-vertical > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n  display: inline-block;\n  -webkit-transition: 200ms top, 200ms -webkit-transform;\n  transition: 200ms top, 200ms -webkit-transform;\n  -o-transition: 200ms transform, 200ms top;\n  transition: 200ms transform, 200ms top;\n  transition: 200ms transform, 200ms top, 200ms -webkit-transform;\n}\n.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {\n  margin: 0 4px;\n}\n.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic {\n  left: 50%;\n  -webkit-transform: translateX(-50%);\n  -ms-transform: translateX(-50%);\n  transform: translateX(-50%);\n  white-space: nowrap;\n}\n.swiper-container-horizontal > .swiper-pagination-bullets.swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n  -webkit-transition: 200ms left, 200ms -webkit-transform;\n  transition: 200ms left, 200ms -webkit-transform;\n  -o-transition: 200ms transform, 200ms left;\n  transition: 200ms transform, 200ms left;\n  transition: 200ms transform, 200ms left, 200ms -webkit-transform;\n}\n.swiper-container-horizontal.swiper-container-rtl > .swiper-pagination-bullets-dynamic .swiper-pagination-bullet {\n  -webkit-transition: 200ms right, 200ms -webkit-transform;\n  transition: 200ms right, 200ms -webkit-transform;\n  -o-transition: 200ms transform, 200ms right;\n  transition: 200ms transform, 200ms right;\n  transition: 200ms transform, 200ms right, 200ms -webkit-transform;\n}\n/* Progress */\n.swiper-pagination-progressbar {\n  background: rgba(0, 0, 0, 0.25);\n  position: absolute;\n}\n.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\n  background: #007aff;\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n  -webkit-transform: scale(0);\n  -ms-transform: scale(0);\n  transform: scale(0);\n  -webkit-transform-origin: left top;\n  -ms-transform-origin: left top;\n  transform-origin: left top;\n}\n.swiper-container-rtl .swiper-pagination-progressbar .swiper-pagination-progressbar-fill {\n  -webkit-transform-origin: right top;\n  -ms-transform-origin: right top;\n  transform-origin: right top;\n}\n.swiper-container-horizontal > .swiper-pagination-progressbar,\n.swiper-container-vertical > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {\n  width: 100%;\n  height: 4px;\n  left: 0;\n  top: 0;\n}\n.swiper-container-vertical > .swiper-pagination-progressbar,\n.swiper-container-horizontal > .swiper-pagination-progressbar.swiper-pagination-progressbar-opposite {\n  width: 4px;\n  height: 100%;\n  left: 0;\n  top: 0;\n}\n.swiper-pagination-white .swiper-pagination-bullet-active {\n  background: #ffffff;\n}\n.swiper-pagination-progressbar.swiper-pagination-white {\n  background: rgba(255, 255, 255, 0.25);\n}\n.swiper-pagination-progressbar.swiper-pagination-white .swiper-pagination-progressbar-fill {\n  background: #ffffff;\n}\n.swiper-pagination-black .swiper-pagination-bullet-active {\n  background: #000000;\n}\n.swiper-pagination-progressbar.swiper-pagination-black {\n  background: rgba(0, 0, 0, 0.25);\n}\n.swiper-pagination-progressbar.swiper-pagination-black .swiper-pagination-progressbar-fill {\n  background: #000000;\n}\n.swiper-pagination-lock {\n  display: none;\n}\n/* Scrollbar */\n.swiper-scrollbar {\n  border-radius: 10px;\n  position: relative;\n  -ms-touch-action: none;\n  background: rgba(0, 0, 0, 0.1);\n}\n.swiper-container-horizontal > .swiper-scrollbar {\n  position: absolute;\n  left: 1%;\n  bottom: 3px;\n  z-index: 50;\n  height: 5px;\n  width: 98%;\n}\n.swiper-container-vertical > .swiper-scrollbar {\n  position: absolute;\n  right: 3px;\n  top: 1%;\n  z-index: 50;\n  width: 5px;\n  height: 98%;\n}\n.swiper-scrollbar-drag {\n  height: 100%;\n  width: 100%;\n  position: relative;\n  background: rgba(0, 0, 0, 0.5);\n  border-radius: 10px;\n  left: 0;\n  top: 0;\n}\n.swiper-scrollbar-cursor-drag {\n  cursor: move;\n}\n.swiper-scrollbar-lock {\n  display: none;\n}\n.swiper-zoom-container {\n  width: 100%;\n  height: 100%;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-pack: center;\n  -webkit-justify-content: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  text-align: center;\n}\n.swiper-zoom-container > img,\n.swiper-zoom-container > svg,\n.swiper-zoom-container > canvas {\n  max-width: 100%;\n  max-height: 100%;\n  -o-object-fit: contain;\n  object-fit: contain;\n}\n.swiper-slide-zoomed {\n  cursor: move;\n}\n/* Preloader */\n.swiper-lazy-preloader {\n  width: 42px;\n  height: 42px;\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  margin-left: -21px;\n  margin-top: -21px;\n  z-index: 10;\n  -webkit-transform-origin: 50%;\n  -ms-transform-origin: 50%;\n  transform-origin: 50%;\n  -webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;\n  animation: swiper-preloader-spin 1s steps(12, end) infinite;\n}\n.swiper-lazy-preloader:after {\n  display: block;\n  content: '';\n  width: 100%;\n  height: 100%;\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n  background-position: 50%;\n  background-size: 100%;\n  background-repeat: no-repeat;\n}\n.swiper-lazy-preloader-white:after {\n  background-image: url(\"data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E\");\n}\n@-webkit-keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n@keyframes swiper-preloader-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n/* a11y */\n.swiper-container .swiper-notification {\n  position: absolute;\n  left: 0;\n  top: 0;\n  pointer-events: none;\n  opacity: 0;\n  z-index: -1000;\n}\n.swiper-container-fade.swiper-container-free-mode .swiper-slide {\n  -webkit-transition-timing-function: ease-out;\n  -o-transition-timing-function: ease-out;\n  transition-timing-function: ease-out;\n}\n.swiper-container-fade .swiper-slide {\n  pointer-events: none;\n  -webkit-transition-property: opacity;\n  -o-transition-property: opacity;\n  transition-property: opacity;\n}\n.swiper-container-fade .swiper-slide .swiper-slide {\n  pointer-events: none;\n}\n.swiper-container-fade .swiper-slide-active,\n.swiper-container-fade .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto;\n}\n.swiper-container-cube {\n  overflow: visible;\n}\n.swiper-container-cube .swiper-slide {\n  pointer-events: none;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  z-index: 1;\n  visibility: hidden;\n  -webkit-transform-origin: 0 0;\n  -ms-transform-origin: 0 0;\n  transform-origin: 0 0;\n  width: 100%;\n  height: 100%;\n}\n.swiper-container-cube .swiper-slide .swiper-slide {\n  pointer-events: none;\n}\n.swiper-container-cube.swiper-container-rtl .swiper-slide {\n  -webkit-transform-origin: 100% 0;\n  -ms-transform-origin: 100% 0;\n  transform-origin: 100% 0;\n}\n.swiper-container-cube .swiper-slide-active,\n.swiper-container-cube .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto;\n}\n.swiper-container-cube .swiper-slide-active,\n.swiper-container-cube .swiper-slide-next,\n.swiper-container-cube .swiper-slide-prev,\n.swiper-container-cube .swiper-slide-next + .swiper-slide {\n  pointer-events: auto;\n  visibility: visible;\n}\n.swiper-container-cube .swiper-slide-shadow-top,\n.swiper-container-cube .swiper-slide-shadow-bottom,\n.swiper-container-cube .swiper-slide-shadow-left,\n.swiper-container-cube .swiper-slide-shadow-right {\n  z-index: 0;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n.swiper-container-cube .swiper-cube-shadow {\n  position: absolute;\n  left: 0;\n  bottom: 0px;\n  width: 100%;\n  height: 100%;\n  background: #000;\n  opacity: 0.6;\n  -webkit-filter: blur(50px);\n  filter: blur(50px);\n  z-index: 0;\n}\n.swiper-container-flip {\n  overflow: visible;\n}\n.swiper-container-flip .swiper-slide {\n  pointer-events: none;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  z-index: 1;\n}\n.swiper-container-flip .swiper-slide .swiper-slide {\n  pointer-events: none;\n}\n.swiper-container-flip .swiper-slide-active,\n.swiper-container-flip .swiper-slide-active .swiper-slide-active {\n  pointer-events: auto;\n}\n.swiper-container-flip .swiper-slide-shadow-top,\n.swiper-container-flip .swiper-slide-shadow-bottom,\n.swiper-container-flip .swiper-slide-shadow-left,\n.swiper-container-flip .swiper-slide-shadow-right {\n  z-index: 0;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n.swiper-container-coverflow .swiper-wrapper {\n  /* Windows 8 IE 10 fix */\n  -ms-perspective: 1200px;\n}\n.app-layout[data-v-277fcd07] {\n  width: 100vw;\n  height: 100vh;\n  overflow: hidden auto;\n}\n.app-layout .bold[data-v-277fcd07] {\n  font-family: 'sonyBold';\n}\n.app-layout .light[data-v-277fcd07] {\n  font-family: 'sonyLight';\n}\n.app-layout .regular[data-v-277fcd07] {\n  font-family: 'sonyRegular';\n}\n.app-layout .active[data-v-277fcd07] {\n  background: #fff;\n  border: 1px solid #666;\n  border-radius: 2px;\n}\n.app-layout .anchor-container[data-v-277fcd07] {\n  background: rgba(237, 237, 237);\n}\n.app-layout .global-bg[data-v-277fcd07] {\n  background: rgba(237, 237, 237);\n}\n.app-layout .baoming-btn[data-v-277fcd07] {\n  background: url('') no-repeat;\n  background-size: 100% 100%;\n}\n.app-layout .topic-bg[data-v-277fcd07] {\n  background: url('" + new URL('topic-bg.jpg', module.meta.url).href + "') no-repeat;\n  background-size: 100% 100%;\n}\n.app-layout .nav-bar[data-v-277fcd07] {\n  position: -webkit-sticky;\n  position: sticky;\n  top: 0;\n  z-index: 50;\n}\n.app-layout .nav-bar .active-nav-btn[data-v-277fcd07] {\n  background: #fff;\n}\n.app-layout .border-settop[data-v-277fcd07] {\n  border: 1px solid #666;\n  border-bottom: none;\n  border-top-right-radius: 40%;\n}\n.app-layout .border-setbottom[data-v-277fcd07] {\n  border: 1px solid #666;\n  border-top: none;\n  border-bottom-right-radius: 40%;\n}\n.app-layout .moveup[data-v-277fcd07] {\n  -webkit-animation: move-up-277fcd07 2.5s ease-in-out infinite;\n          animation: move-up-277fcd07 2.5s ease-in-out infinite;\n}\n@-webkit-keyframes move-up-277fcd07 {\n0% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n}\n50% {\n    -webkit-transform: translateY(-10px);\n            transform: translateY(-10px);\n}\n100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n}\n}\n@keyframes move-up-277fcd07 {\n0% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n}\n50% {\n    -webkit-transform: translateY(-10px);\n            transform: translateY(-10px);\n}\n100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n}\n}\n.app-layout .movedown[data-v-277fcd07] {\n  -webkit-animation: move-down-277fcd07 3s ease infinite alternate;\n          animation: move-down-277fcd07 3s ease infinite alternate;\n}\n@-webkit-keyframes move-down-277fcd07 {\n0% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n}\n50% {\n    -webkit-transform: translateY(10px);\n            transform: translateY(10px);\n}\n100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n}\n}\n@keyframes move-down-277fcd07 {\n0% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n}\n50% {\n    -webkit-transform: translateY(10px);\n            transform: translateY(10px);\n}\n100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n}\n}\n\n.app-layout .swiper-container .swiper-slide {\n  width: 60%;\n}\n.app-layout .swiper-container .swiper-button-prev {\n  background-image: url('" + new URL('arrow-left.png', module.meta.url).href + "');\n  background-size: 40px;\n}\n.app-layout .swiper-container .swiper-button-next {\n  background-image: url('" + new URL('arrow-right.png', module.meta.url).href + "');\n  background-size: 40px;\n}\n";
    document.head.appendChild(__vite_style__);
    return {
      execute: function execute() {
        false && function polyfill() {
          var relList = document.createElement('link').relList;
          if (relList && relList.supports && relList.supports('modulepreload')) {
            return;
          }
          var _iterator = _createForOfIteratorHelper(document.querySelectorAll('link[rel="modulepreload"]')),
            _step;
          try {
            for (_iterator.s(); !(_step = _iterator.n()).done;) {
              var link = _step.value;
              processPreload(link);
            }
          } catch (err) {
            _iterator.e(err);
          } finally {
            _iterator.f();
          }
          new MutationObserver(function (mutations) {
            var _iterator2 = _createForOfIteratorHelper(mutations),
              _step2;
            try {
              for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
                var mutation = _step2.value;
                if (mutation.type !== 'childList') {
                  continue;
                }
                var _iterator3 = _createForOfIteratorHelper(mutation.addedNodes),
                  _step3;
                try {
                  for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
                    var node = _step3.value;
                    if (node.tagName === 'LINK' && node.rel === 'modulepreload') processPreload(node);
                  }
                } catch (err) {
                  _iterator3.e(err);
                } finally {
                  _iterator3.f();
                }
              }
            } catch (err) {
              _iterator2.e(err);
            } finally {
              _iterator2.f();
            }
          }).observe(document, {
            childList: true,
            subtree: true
          });
          function getFetchOpts(link) {
            var fetchOpts = {};
            if (link.integrity) fetchOpts.integrity = link.integrity;
            if (link.referrerPolicy) fetchOpts.referrerPolicy = link.referrerPolicy;
            if (link.crossOrigin === 'use-credentials') fetchOpts.credentials = 'include';else if (link.crossOrigin === 'anonymous') fetchOpts.credentials = 'omit';else fetchOpts.credentials = 'same-origin';
            return fetchOpts;
          }
          function processPreload(link) {
            if (link.ep)
              // ep marker = processed
              return;
            link.ep = true;
            // prepopulate the load record
            var fetchOpts = getFetchOpts(link);
            fetch(link.href, fetchOpts);
          }
        }();
        var font = '';
        var style = '';
        var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
        var swiper$1 = {
          exports: {}
        };

        /**
         * Swiper 4.5.1
         * Most modern mobile touch slider and framework with hardware accelerated transitions
         * http://www.idangero.us/swiper/
         *
         * Copyright 2014-2019 Vladimir Kharlampidi
         *
         * Released under the MIT License
         *
         * Released on: September 13, 2019
         */

        (function (module, exports) {
          (function (global, factory) {
            module.exports = factory();
          })(commonjsGlobal, function () {
            /**
             * SSR Window 1.0.1
             * Better handling for window object in SSR environment
             * https://github.com/nolimits4web/ssr-window
             *
             * Copyright 2018, Vladimir Kharlampidi
             *
             * Licensed under MIT
             *
             * Released on: July 18, 2018
             */
            var doc = typeof document === 'undefined' ? {
              body: {},
              addEventListener: function addEventListener() {},
              removeEventListener: function removeEventListener() {},
              activeElement: {
                blur: function blur() {},
                nodeName: ''
              },
              querySelector: function querySelector() {
                return null;
              },
              querySelectorAll: function querySelectorAll() {
                return [];
              },
              getElementById: function getElementById() {
                return null;
              },
              createEvent: function createEvent() {
                return {
                  initEvent: function initEvent() {}
                };
              },
              createElement: function createElement() {
                return {
                  children: [],
                  childNodes: [],
                  style: {},
                  setAttribute: function setAttribute() {},
                  getElementsByTagName: function getElementsByTagName() {
                    return [];
                  }
                };
              },
              location: {
                hash: ''
              }
            } : document; // eslint-disable-line

            var win = typeof window === 'undefined' ? {
              document: doc,
              navigator: {
                userAgent: ''
              },
              location: {},
              history: {},
              CustomEvent: function CustomEvent() {
                return this;
              },
              addEventListener: function addEventListener() {},
              removeEventListener: function removeEventListener() {},
              getComputedStyle: function getComputedStyle() {
                return {
                  getPropertyValue: function getPropertyValue() {
                    return '';
                  }
                };
              },
              Image: function Image() {},
              Date: function Date() {},
              screen: {},
              setTimeout: function setTimeout() {},
              clearTimeout: function clearTimeout() {}
            } : window; // eslint-disable-line

            /**
             * Dom7 2.1.3
             * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API
             * http://framework7.io/docs/dom.html
             *
             * Copyright 2019, Vladimir Kharlampidi
             * The iDangero.us
             * http://www.idangero.us/
             *
             * Licensed under MIT
             *
             * Released on: February 11, 2019
             */

            var Dom7 = function Dom7(arr) {
              var self = this;
              // Create array-like object
              for (var i = 0; i < arr.length; i += 1) {
                self[i] = arr[i];
              }
              self.length = arr.length;
              // Return collection with methods
              return this;
            };
            function $(selector, context) {
              var arr = [];
              var i = 0;
              if (selector && !context) {
                if (selector instanceof Dom7) {
                  return selector;
                }
              }
              if (selector) {
                // String
                if (typeof selector === 'string') {
                  var els;
                  var tempParent;
                  var html = selector.trim();
                  if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) {
                    var toCreate = 'div';
                    if (html.indexOf('<li') === 0) {
                      toCreate = 'ul';
                    }
                    if (html.indexOf('<tr') === 0) {
                      toCreate = 'tbody';
                    }
                    if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) {
                      toCreate = 'tr';
                    }
                    if (html.indexOf('<tbody') === 0) {
                      toCreate = 'table';
                    }
                    if (html.indexOf('<option') === 0) {
                      toCreate = 'select';
                    }
                    tempParent = doc.createElement(toCreate);
                    tempParent.innerHTML = html;
                    for (i = 0; i < tempParent.childNodes.length; i += 1) {
                      arr.push(tempParent.childNodes[i]);
                    }
                  } else {
                    if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {
                      // Pure ID selector
                      els = [doc.getElementById(selector.trim().split('#')[1])];
                    } else {
                      // Other selectors
                      els = (context || doc).querySelectorAll(selector.trim());
                    }
                    for (i = 0; i < els.length; i += 1) {
                      if (els[i]) {
                        arr.push(els[i]);
                      }
                    }
                  }
                } else if (selector.nodeType || selector === win || selector === doc) {
                  // Node/element
                  arr.push(selector);
                } else if (selector.length > 0 && selector[0].nodeType) {
                  // Array of elements or instance of Dom
                  for (i = 0; i < selector.length; i += 1) {
                    arr.push(selector[i]);
                  }
                }
              }
              return new Dom7(arr);
            }
            $.fn = Dom7.prototype;
            $.Class = Dom7;
            $.Dom7 = Dom7;
            function unique(arr) {
              var uniqueArray = [];
              for (var i = 0; i < arr.length; i += 1) {
                if (uniqueArray.indexOf(arr[i]) === -1) {
                  uniqueArray.push(arr[i]);
                }
              }
              return uniqueArray;
            }

            // Classes and attributes
            function addClass(className) {
              if (typeof className === 'undefined') {
                return this;
              }
              var classes = className.split(' ');
              for (var i = 0; i < classes.length; i += 1) {
                for (var j = 0; j < this.length; j += 1) {
                  if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') {
                    this[j].classList.add(classes[i]);
                  }
                }
              }
              return this;
            }
            function removeClass(className) {
              var classes = className.split(' ');
              for (var i = 0; i < classes.length; i += 1) {
                for (var j = 0; j < this.length; j += 1) {
                  if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') {
                    this[j].classList.remove(classes[i]);
                  }
                }
              }
              return this;
            }
            function hasClass(className) {
              if (!this[0]) {
                return false;
              }
              return this[0].classList.contains(className);
            }
            function toggleClass(className) {
              var classes = className.split(' ');
              for (var i = 0; i < classes.length; i += 1) {
                for (var j = 0; j < this.length; j += 1) {
                  if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') {
                    this[j].classList.toggle(classes[i]);
                  }
                }
              }
              return this;
            }
            function attr(attrs, value) {
              var arguments$1 = arguments;
              if (arguments.length === 1 && typeof attrs === 'string') {
                // Get attr
                if (this[0]) {
                  return this[0].getAttribute(attrs);
                }
                return undefined;
              }

              // Set attrs
              for (var i = 0; i < this.length; i += 1) {
                if (arguments$1.length === 2) {
                  // String
                  this[i].setAttribute(attrs, value);
                } else {
                  // Object
                  // eslint-disable-next-line
                  for (var attrName in attrs) {
                    this[i][attrName] = attrs[attrName];
                    this[i].setAttribute(attrName, attrs[attrName]);
                  }
                }
              }
              return this;
            }
            // eslint-disable-next-line
            function removeAttr(attr) {
              for (var i = 0; i < this.length; i += 1) {
                this[i].removeAttribute(attr);
              }
              return this;
            }
            function data(key, value) {
              var el;
              if (typeof value === 'undefined') {
                el = this[0];
                // Get value
                if (el) {
                  if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {
                    return el.dom7ElementDataStorage[key];
                  }
                  var dataKey = el.getAttribute("data-" + key);
                  if (dataKey) {
                    return dataKey;
                  }
                  return undefined;
                }
                return undefined;
              }

              // Set value
              for (var i = 0; i < this.length; i += 1) {
                el = this[i];
                if (!el.dom7ElementDataStorage) {
                  el.dom7ElementDataStorage = {};
                }
                el.dom7ElementDataStorage[key] = value;
              }
              return this;
            }
            // Transforms
            // eslint-disable-next-line
            function transform(transform) {
              for (var i = 0; i < this.length; i += 1) {
                var elStyle = this[i].style;
                elStyle.webkitTransform = transform;
                elStyle.transform = transform;
              }
              return this;
            }
            function transition(duration) {
              if (typeof duration !== 'string') {
                duration = duration + "ms"; // eslint-disable-line
              }

              for (var i = 0; i < this.length; i += 1) {
                var elStyle = this[i].style;
                elStyle.webkitTransitionDuration = duration;
                elStyle.transitionDuration = duration;
              }
              return this;
            }
            // Events
            function on() {
              var assign;
              var args = [],
                len = arguments.length;
              while (len--) args[len] = arguments[len];
              var eventType = args[0];
              var targetSelector = args[1];
              var listener = args[2];
              var capture = args[3];
              if (typeof args[1] === 'function') {
                assign = args, eventType = assign[0], listener = assign[1], capture = assign[2];
                targetSelector = undefined;
              }
              if (!capture) {
                capture = false;
              }
              function handleLiveEvent(e) {
                var target = e.target;
                if (!target) {
                  return;
                }
                var eventData = e.target.dom7EventData || [];
                if (eventData.indexOf(e) < 0) {
                  eventData.unshift(e);
                }
                if ($(target).is(targetSelector)) {
                  listener.apply(target, eventData);
                } else {
                  var parents = $(target).parents(); // eslint-disable-line
                  for (var k = 0; k < parents.length; k += 1) {
                    if ($(parents[k]).is(targetSelector)) {
                      listener.apply(parents[k], eventData);
                    }
                  }
                }
              }
              function handleEvent(e) {
                var eventData = e && e.target ? e.target.dom7EventData || [] : [];
                if (eventData.indexOf(e) < 0) {
                  eventData.unshift(e);
                }
                listener.apply(this, eventData);
              }
              var events = eventType.split(' ');
              var j;
              for (var i = 0; i < this.length; i += 1) {
                var el = this[i];
                if (!targetSelector) {
                  for (j = 0; j < events.length; j += 1) {
                    var event = events[j];
                    if (!el.dom7Listeners) {
                      el.dom7Listeners = {};
                    }
                    if (!el.dom7Listeners[event]) {
                      el.dom7Listeners[event] = [];
                    }
                    el.dom7Listeners[event].push({
                      listener: listener,
                      proxyListener: handleEvent
                    });
                    el.addEventListener(event, handleEvent, capture);
                  }
                } else {
                  // Live events
                  for (j = 0; j < events.length; j += 1) {
                    var event$1 = events[j];
                    if (!el.dom7LiveListeners) {
                      el.dom7LiveListeners = {};
                    }
                    if (!el.dom7LiveListeners[event$1]) {
                      el.dom7LiveListeners[event$1] = [];
                    }
                    el.dom7LiveListeners[event$1].push({
                      listener: listener,
                      proxyListener: handleLiveEvent
                    });
                    el.addEventListener(event$1, handleLiveEvent, capture);
                  }
                }
              }
              return this;
            }
            function off() {
              var assign;
              var args = [],
                len = arguments.length;
              while (len--) args[len] = arguments[len];
              var eventType = args[0];
              var targetSelector = args[1];
              var listener = args[2];
              var capture = args[3];
              if (typeof args[1] === 'function') {
                assign = args, eventType = assign[0], listener = assign[1], capture = assign[2];
                targetSelector = undefined;
              }
              if (!capture) {
                capture = false;
              }
              var events = eventType.split(' ');
              for (var i = 0; i < events.length; i += 1) {
                var event = events[i];
                for (var j = 0; j < this.length; j += 1) {
                  var el = this[j];
                  var handlers = void 0;
                  if (!targetSelector && el.dom7Listeners) {
                    handlers = el.dom7Listeners[event];
                  } else if (targetSelector && el.dom7LiveListeners) {
                    handlers = el.dom7LiveListeners[event];
                  }
                  if (handlers && handlers.length) {
                    for (var k = handlers.length - 1; k >= 0; k -= 1) {
                      var handler = handlers[k];
                      if (listener && handler.listener === listener) {
                        el.removeEventListener(event, handler.proxyListener, capture);
                        handlers.splice(k, 1);
                      } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {
                        el.removeEventListener(event, handler.proxyListener, capture);
                        handlers.splice(k, 1);
                      } else if (!listener) {
                        el.removeEventListener(event, handler.proxyListener, capture);
                        handlers.splice(k, 1);
                      }
                    }
                  }
                }
              }
              return this;
            }
            function trigger() {
              var args = [],
                len = arguments.length;
              while (len--) args[len] = arguments[len];
              var events = args[0].split(' ');
              var eventData = args[1];
              for (var i = 0; i < events.length; i += 1) {
                var event = events[i];
                for (var j = 0; j < this.length; j += 1) {
                  var el = this[j];
                  var evt = void 0;
                  try {
                    evt = new win.CustomEvent(event, {
                      detail: eventData,
                      bubbles: true,
                      cancelable: true
                    });
                  } catch (e) {
                    evt = doc.createEvent('Event');
                    evt.initEvent(event, true, true);
                    evt.detail = eventData;
                  }
                  // eslint-disable-next-line
                  el.dom7EventData = args.filter(function (data, dataIndex) {
                    return dataIndex > 0;
                  });
                  el.dispatchEvent(evt);
                  el.dom7EventData = [];
                  delete el.dom7EventData;
                }
              }
              return this;
            }
            function transitionEnd(callback) {
              var events = ['webkitTransitionEnd', 'transitionend'];
              var dom = this;
              var i;
              function fireCallBack(e) {
                /* jshint validthis:true */
                if (e.target !== this) {
                  return;
                }
                callback.call(this, e);
                for (i = 0; i < events.length; i += 1) {
                  dom.off(events[i], fireCallBack);
                }
              }
              if (callback) {
                for (i = 0; i < events.length; i += 1) {
                  dom.on(events[i], fireCallBack);
                }
              }
              return this;
            }
            function outerWidth(includeMargins) {
              if (this.length > 0) {
                if (includeMargins) {
                  // eslint-disable-next-line
                  var styles = this.styles();
                  return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left'));
                }
                return this[0].offsetWidth;
              }
              return null;
            }
            function outerHeight(includeMargins) {
              if (this.length > 0) {
                if (includeMargins) {
                  // eslint-disable-next-line
                  var styles = this.styles();
                  return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom'));
                }
                return this[0].offsetHeight;
              }
              return null;
            }
            function offset() {
              if (this.length > 0) {
                var el = this[0];
                var box = el.getBoundingClientRect();
                var body = doc.body;
                var clientTop = el.clientTop || body.clientTop || 0;
                var clientLeft = el.clientLeft || body.clientLeft || 0;
                var scrollTop = el === win ? win.scrollY : el.scrollTop;
                var scrollLeft = el === win ? win.scrollX : el.scrollLeft;
                return {
                  top: box.top + scrollTop - clientTop,
                  left: box.left + scrollLeft - clientLeft
                };
              }
              return null;
            }
            function styles() {
              if (this[0]) {
                return win.getComputedStyle(this[0], null);
              }
              return {};
            }
            function css(props, value) {
              var i;
              if (arguments.length === 1) {
                if (typeof props === 'string') {
                  if (this[0]) {
                    return win.getComputedStyle(this[0], null).getPropertyValue(props);
                  }
                } else {
                  for (i = 0; i < this.length; i += 1) {
                    // eslint-disable-next-line
                    for (var prop in props) {
                      this[i].style[prop] = props[prop];
                    }
                  }
                  return this;
                }
              }
              if (arguments.length === 2 && typeof props === 'string') {
                for (i = 0; i < this.length; i += 1) {
                  this[i].style[props] = value;
                }
                return this;
              }
              return this;
            }
            // Iterate over the collection passing elements to `callback`
            function each(callback) {
              // Don't bother continuing without a callback
              if (!callback) {
                return this;
              }
              // Iterate over the current collection
              for (var i = 0; i < this.length; i += 1) {
                // If the callback returns false
                if (callback.call(this[i], i, this[i]) === false) {
                  // End the loop early
                  return this;
                }
              }
              // Return `this` to allow chained DOM operations
              return this;
            }
            // eslint-disable-next-line
            function html(html) {
              if (typeof html === 'undefined') {
                return this[0] ? this[0].innerHTML : undefined;
              }
              for (var i = 0; i < this.length; i += 1) {
                this[i].innerHTML = html;
              }
              return this;
            }
            // eslint-disable-next-line
            function text(text) {
              if (typeof text === 'undefined') {
                if (this[0]) {
                  return this[0].textContent.trim();
                }
                return null;
              }
              for (var i = 0; i < this.length; i += 1) {
                this[i].textContent = text;
              }
              return this;
            }
            function is(selector) {
              var el = this[0];
              var compareWith;
              var i;
              if (!el || typeof selector === 'undefined') {
                return false;
              }
              if (typeof selector === 'string') {
                if (el.matches) {
                  return el.matches(selector);
                } else if (el.webkitMatchesSelector) {
                  return el.webkitMatchesSelector(selector);
                } else if (el.msMatchesSelector) {
                  return el.msMatchesSelector(selector);
                }
                compareWith = $(selector);
                for (i = 0; i < compareWith.length; i += 1) {
                  if (compareWith[i] === el) {
                    return true;
                  }
                }
                return false;
              } else if (selector === doc) {
                return el === doc;
              } else if (selector === win) {
                return el === win;
              }
              if (selector.nodeType || selector instanceof Dom7) {
                compareWith = selector.nodeType ? [selector] : selector;
                for (i = 0; i < compareWith.length; i += 1) {
                  if (compareWith[i] === el) {
                    return true;
                  }
                }
                return false;
              }
              return false;
            }
            function index() {
              var child = this[0];
              var i;
              if (child) {
                i = 0;
                // eslint-disable-next-line
                while ((child = child.previousSibling) !== null) {
                  if (child.nodeType === 1) {
                    i += 1;
                  }
                }
                return i;
              }
              return undefined;
            }
            // eslint-disable-next-line
            function eq(index) {
              if (typeof index === 'undefined') {
                return this;
              }
              var length = this.length;
              var returnIndex;
              if (index > length - 1) {
                return new Dom7([]);
              }
              if (index < 0) {
                returnIndex = length + index;
                if (returnIndex < 0) {
                  return new Dom7([]);
                }
                return new Dom7([this[returnIndex]]);
              }
              return new Dom7([this[index]]);
            }
            function append() {
              var args = [],
                len = arguments.length;
              while (len--) args[len] = arguments[len];
              var newChild;
              for (var k = 0; k < args.length; k += 1) {
                newChild = args[k];
                for (var i = 0; i < this.length; i += 1) {
                  if (typeof newChild === 'string') {
                    var tempDiv = doc.createElement('div');
                    tempDiv.innerHTML = newChild;
                    while (tempDiv.firstChild) {
                      this[i].appendChild(tempDiv.firstChild);
                    }
                  } else if (newChild instanceof Dom7) {
                    for (var j = 0; j < newChild.length; j += 1) {
                      this[i].appendChild(newChild[j]);
                    }
                  } else {
                    this[i].appendChild(newChild);
                  }
                }
              }
              return this;
            }
            function prepend(newChild) {
              var i;
              var j;
              for (i = 0; i < this.length; i += 1) {
                if (typeof newChild === 'string') {
                  var tempDiv = doc.createElement('div');
                  tempDiv.innerHTML = newChild;
                  for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {
                    this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);
                  }
                } else if (newChild instanceof Dom7) {
                  for (j = 0; j < newChild.length; j += 1) {
                    this[i].insertBefore(newChild[j], this[i].childNodes[0]);
                  }
                } else {
                  this[i].insertBefore(newChild, this[i].childNodes[0]);
                }
              }
              return this;
            }
            function next(selector) {
              if (this.length > 0) {
                if (selector) {
                  if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {
                    return new Dom7([this[0].nextElementSibling]);
                  }
                  return new Dom7([]);
                }
                if (this[0].nextElementSibling) {
                  return new Dom7([this[0].nextElementSibling]);
                }
                return new Dom7([]);
              }
              return new Dom7([]);
            }
            function nextAll(selector) {
              var nextEls = [];
              var el = this[0];
              if (!el) {
                return new Dom7([]);
              }
              while (el.nextElementSibling) {
                var next = el.nextElementSibling; // eslint-disable-line
                if (selector) {
                  if ($(next).is(selector)) {
                    nextEls.push(next);
                  }
                } else {
                  nextEls.push(next);
                }
                el = next;
              }
              return new Dom7(nextEls);
            }
            function prev(selector) {
              if (this.length > 0) {
                var el = this[0];
                if (selector) {
                  if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {
                    return new Dom7([el.previousElementSibling]);
                  }
                  return new Dom7([]);
                }
                if (el.previousElementSibling) {
                  return new Dom7([el.previousElementSibling]);
                }
                return new Dom7([]);
              }
              return new Dom7([]);
            }
            function prevAll(selector) {
              var prevEls = [];
              var el = this[0];
              if (!el) {
                return new Dom7([]);
              }
              while (el.previousElementSibling) {
                var prev = el.previousElementSibling; // eslint-disable-line
                if (selector) {
                  if ($(prev).is(selector)) {
                    prevEls.push(prev);
                  }
                } else {
                  prevEls.push(prev);
                }
                el = prev;
              }
              return new Dom7(prevEls);
            }
            function parent(selector) {
              var parents = []; // eslint-disable-line
              for (var i = 0; i < this.length; i += 1) {
                if (this[i].parentNode !== null) {
                  if (selector) {
                    if ($(this[i].parentNode).is(selector)) {
                      parents.push(this[i].parentNode);
                    }
                  } else {
                    parents.push(this[i].parentNode);
                  }
                }
              }
              return $(unique(parents));
            }
            function parents(selector) {
              var parents = []; // eslint-disable-line
              for (var i = 0; i < this.length; i += 1) {
                var parent = this[i].parentNode; // eslint-disable-line
                while (parent) {
                  if (selector) {
                    if ($(parent).is(selector)) {
                      parents.push(parent);
                    }
                  } else {
                    parents.push(parent);
                  }
                  parent = parent.parentNode;
                }
              }
              return $(unique(parents));
            }
            function closest(selector) {
              var closest = this; // eslint-disable-line
              if (typeof selector === 'undefined') {
                return new Dom7([]);
              }
              if (!closest.is(selector)) {
                closest = closest.parents(selector).eq(0);
              }
              return closest;
            }
            function find(selector) {
              var foundElements = [];
              for (var i = 0; i < this.length; i += 1) {
                var found = this[i].querySelectorAll(selector);
                for (var j = 0; j < found.length; j += 1) {
                  foundElements.push(found[j]);
                }
              }
              return new Dom7(foundElements);
            }
            function children(selector) {
              var children = []; // eslint-disable-line
              for (var i = 0; i < this.length; i += 1) {
                var childNodes = this[i].childNodes;
                for (var j = 0; j < childNodes.length; j += 1) {
                  if (!selector) {
                    if (childNodes[j].nodeType === 1) {
                      children.push(childNodes[j]);
                    }
                  } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {
                    children.push(childNodes[j]);
                  }
                }
              }
              return new Dom7(unique(children));
            }
            function remove() {
              for (var i = 0; i < this.length; i += 1) {
                if (this[i].parentNode) {
                  this[i].parentNode.removeChild(this[i]);
                }
              }
              return this;
            }
            function add() {
              var args = [],
                len = arguments.length;
              while (len--) args[len] = arguments[len];
              var dom = this;
              var i;
              var j;
              for (i = 0; i < args.length; i += 1) {
                var toAdd = $(args[i]);
                for (j = 0; j < toAdd.length; j += 1) {
                  dom[dom.length] = toAdd[j];
                  dom.length += 1;
                }
              }
              return dom;
            }
            var Methods = {
              addClass: addClass,
              removeClass: removeClass,
              hasClass: hasClass,
              toggleClass: toggleClass,
              attr: attr,
              removeAttr: removeAttr,
              data: data,
              transform: transform,
              transition: transition,
              on: on,
              off: off,
              trigger: trigger,
              transitionEnd: transitionEnd,
              outerWidth: outerWidth,
              outerHeight: outerHeight,
              offset: offset,
              css: css,
              each: each,
              html: html,
              text: text,
              is: is,
              index: index,
              eq: eq,
              append: append,
              prepend: prepend,
              next: next,
              nextAll: nextAll,
              prev: prev,
              prevAll: prevAll,
              parent: parent,
              parents: parents,
              closest: closest,
              find: find,
              children: children,
              remove: remove,
              add: add,
              styles: styles
            };
            Object.keys(Methods).forEach(function (methodName) {
              $.fn[methodName] = $.fn[methodName] || Methods[methodName];
            });
            var Utils = {
              deleteProps: function deleteProps(obj) {
                var object = obj;
                Object.keys(object).forEach(function (key) {
                  try {
                    object[key] = null;
                  } catch (e) {
                    // no getter for object
                  }
                  try {
                    delete object[key];
                  } catch (e) {
                    // something got wrong
                  }
                });
              },
              nextTick: function nextTick(callback, delay) {
                if (delay === void 0) delay = 0;
                return setTimeout(callback, delay);
              },
              now: function now() {
                return Date.now();
              },
              getTranslate: function getTranslate(el, axis) {
                if (axis === void 0) axis = 'x';
                var matrix;
                var curTransform;
                var transformMatrix;
                var curStyle = win.getComputedStyle(el, null);
                if (win.WebKitCSSMatrix) {
                  curTransform = curStyle.transform || curStyle.webkitTransform;
                  if (curTransform.split(',').length > 6) {
                    curTransform = curTransform.split(', ').map(function (a) {
                      return a.replace(',', '.');
                    }).join(', ');
                  }
                  // Some old versions of Webkit choke when 'none' is passed; pass
                  // empty string instead in this case
                  transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
                } else {
                  transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
                  matrix = transformMatrix.toString().split(',');
                }
                if (axis === 'x') {
                  // Latest Chrome and webkits Fix
                  if (win.WebKitCSSMatrix) {
                    curTransform = transformMatrix.m41;
                  }
                  // Crazy IE10 Matrix
                  else if (matrix.length === 16) {
                    curTransform = parseFloat(matrix[12]);
                  }
                  // Normal Browsers
                  else {
                    curTransform = parseFloat(matrix[4]);
                  }
                }
                if (axis === 'y') {
                  // Latest Chrome and webkits Fix
                  if (win.WebKitCSSMatrix) {
                    curTransform = transformMatrix.m42;
                  }
                  // Crazy IE10 Matrix
                  else if (matrix.length === 16) {
                    curTransform = parseFloat(matrix[13]);
                  }
                  // Normal Browsers
                  else {
                    curTransform = parseFloat(matrix[5]);
                  }
                }
                return curTransform || 0;
              },
              parseUrlQuery: function parseUrlQuery(url) {
                var query = {};
                var urlToParse = url || win.location.href;
                var i;
                var params;
                var param;
                var length;
                if (typeof urlToParse === 'string' && urlToParse.length) {
                  urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : '';
                  params = urlToParse.split('&').filter(function (paramsPart) {
                    return paramsPart !== '';
                  });
                  length = params.length;
                  for (i = 0; i < length; i += 1) {
                    param = params[i].replace(/#\S+/g, '').split('=');
                    query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';
                  }
                }
                return query;
              },
              isObject: function isObject(o) {
                return _typeof(o) === 'object' && o !== null && o.constructor && o.constructor === Object;
              },
              extend: function extend() {
                var args = [],
                  len$1 = arguments.length;
                while (len$1--) args[len$1] = arguments[len$1];
                var to = Object(args[0]);
                for (var i = 1; i < args.length; i += 1) {
                  var nextSource = args[i];
                  if (nextSource !== undefined && nextSource !== null) {
                    var keysArray = Object.keys(Object(nextSource));
                    for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
                      var nextKey = keysArray[nextIndex];
                      var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
                      if (desc !== undefined && desc.enumerable) {
                        if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
                          Utils.extend(to[nextKey], nextSource[nextKey]);
                        } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
                          to[nextKey] = {};
                          Utils.extend(to[nextKey], nextSource[nextKey]);
                        } else {
                          to[nextKey] = nextSource[nextKey];
                        }
                      }
                    }
                  }
                }
                return to;
              }
            };
            var Support = function Support() {
              var testDiv = doc.createElement('div');
              return {
                touch: win.Modernizr && win.Modernizr.touch === true || function checkTouch() {
                  return !!(win.navigator.maxTouchPoints > 0 || 'ontouchstart' in win || win.DocumentTouch && doc instanceof win.DocumentTouch);
                }(),
                pointerEvents: !!(win.navigator.pointerEnabled || win.PointerEvent || 'maxTouchPoints' in win.navigator && win.navigator.maxTouchPoints > 0),
                prefixedPointerEvents: !!win.navigator.msPointerEnabled,
                transition: function checkTransition() {
                  var style = testDiv.style;
                  return 'transition' in style || 'webkitTransition' in style || 'MozTransition' in style;
                }(),
                transforms3d: win.Modernizr && win.Modernizr.csstransforms3d === true || function checkTransforms3d() {
                  var style = testDiv.style;
                  return 'webkitPerspective' in style || 'MozPerspective' in style || 'OPerspective' in style || 'MsPerspective' in style || 'perspective' in style;
                }(),
                flexbox: function checkFlexbox() {
                  var style = testDiv.style;
                  var styles = 'alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient'.split(' ');
                  for (var i = 0; i < styles.length; i += 1) {
                    if (styles[i] in style) {
                      return true;
                    }
                  }
                  return false;
                }(),
                observer: function checkObserver() {
                  return 'MutationObserver' in win || 'WebkitMutationObserver' in win;
                }(),
                passiveListener: function checkPassiveListener() {
                  var supportsPassive = false;
                  try {
                    var opts = Object.defineProperty({}, 'passive', {
                      // eslint-disable-next-line
                      get: function get() {
                        supportsPassive = true;
                      }
                    });
                    win.addEventListener('testPassiveListener', null, opts);
                  } catch (e) {
                    // No support
                  }
                  return supportsPassive;
                }(),
                gestures: function checkGestures() {
                  return 'ongesturestart' in win;
                }()
              };
            }();
            var Browser = function Browser() {
              function isSafari() {
                var ua = win.navigator.userAgent.toLowerCase();
                return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;
              }
              return {
                isIE: !!win.navigator.userAgent.match(/Trident/g) || !!win.navigator.userAgent.match(/MSIE/g),
                isEdge: !!win.navigator.userAgent.match(/Edge/g),
                isSafari: isSafari(),
                isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent)
              };
            }();
            var SwiperClass = function SwiperClass(params) {
              if (params === void 0) params = {};
              var self = this;
              self.params = params;

              // Events
              self.eventsListeners = {};
              if (self.params && self.params.on) {
                Object.keys(self.params.on).forEach(function (eventName) {
                  self.on(eventName, self.params.on[eventName]);
                });
              }
            };
            var staticAccessors = {
              components: {
                configurable: true
              }
            };
            SwiperClass.prototype.on = function on(events, handler, priority) {
              var self = this;
              if (typeof handler !== 'function') {
                return self;
              }
              var method = priority ? 'unshift' : 'push';
              events.split(' ').forEach(function (event) {
                if (!self.eventsListeners[event]) {
                  self.eventsListeners[event] = [];
                }
                self.eventsListeners[event][method](handler);
              });
              return self;
            };
            SwiperClass.prototype.once = function once(events, handler, priority) {
              var self = this;
              if (typeof handler !== 'function') {
                return self;
              }
              function onceHandler() {
                var args = [],
                  len = arguments.length;
                while (len--) args[len] = arguments[len];
                handler.apply(self, args);
                self.off(events, onceHandler);
                if (onceHandler.f7proxy) {
                  delete onceHandler.f7proxy;
                }
              }
              onceHandler.f7proxy = handler;
              return self.on(events, onceHandler, priority);
            };
            SwiperClass.prototype.off = function off(events, handler) {
              var self = this;
              if (!self.eventsListeners) {
                return self;
              }
              events.split(' ').forEach(function (event) {
                if (typeof handler === 'undefined') {
                  self.eventsListeners[event] = [];
                } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {
                  self.eventsListeners[event].forEach(function (eventHandler, index) {
                    if (eventHandler === handler || eventHandler.f7proxy && eventHandler.f7proxy === handler) {
                      self.eventsListeners[event].splice(index, 1);
                    }
                  });
                }
              });
              return self;
            };
            SwiperClass.prototype.emit = function emit() {
              var args = [],
                len = arguments.length;
              while (len--) args[len] = arguments[len];
              var self = this;
              if (!self.eventsListeners) {
                return self;
              }
              var events;
              var data;
              var context;
              if (typeof args[0] === 'string' || Array.isArray(args[0])) {
                events = args[0];
                data = args.slice(1, args.length);
                context = self;
              } else {
                events = args[0].events;
                data = args[0].data;
                context = args[0].context || self;
              }
              var eventsArray = Array.isArray(events) ? events : events.split(' ');
              eventsArray.forEach(function (event) {
                if (self.eventsListeners && self.eventsListeners[event]) {
                  var handlers = [];
                  self.eventsListeners[event].forEach(function (eventHandler) {
                    handlers.push(eventHandler);
                  });
                  handlers.forEach(function (eventHandler) {
                    eventHandler.apply(context, data);
                  });
                }
              });
              return self;
            };
            SwiperClass.prototype.useModulesParams = function useModulesParams(instanceParams) {
              var instance = this;
              if (!instance.modules) {
                return;
              }
              Object.keys(instance.modules).forEach(function (moduleName) {
                var module = instance.modules[moduleName];
                // Extend params
                if (module.params) {
                  Utils.extend(instanceParams, module.params);
                }
              });
            };
            SwiperClass.prototype.useModules = function useModules(modulesParams) {
              if (modulesParams === void 0) modulesParams = {};
              var instance = this;
              if (!instance.modules) {
                return;
              }
              Object.keys(instance.modules).forEach(function (moduleName) {
                var module = instance.modules[moduleName];
                var moduleParams = modulesParams[moduleName] || {};
                // Extend instance methods and props
                if (module.instance) {
                  Object.keys(module.instance).forEach(function (modulePropName) {
                    var moduleProp = module.instance[modulePropName];
                    if (typeof moduleProp === 'function') {
                      instance[modulePropName] = moduleProp.bind(instance);
                    } else {
                      instance[modulePropName] = moduleProp;
                    }
                  });
                }
                // Add event listeners
                if (module.on && instance.on) {
                  Object.keys(module.on).forEach(function (moduleEventName) {
                    instance.on(moduleEventName, module.on[moduleEventName]);
                  });
                }

                // Module create callback
                if (module.create) {
                  module.create.bind(instance)(moduleParams);
                }
              });
            };
            staticAccessors.components.set = function (components) {
              var Class = this;
              if (!Class.use) {
                return;
              }
              Class.use(components);
            };
            SwiperClass.installModule = function installModule(module) {
              var params = [],
                len = arguments.length - 1;
              while (len-- > 0) params[len] = arguments[len + 1];
              var Class = this;
              if (!Class.prototype.modules) {
                Class.prototype.modules = {};
              }
              var name = module.name || Object.keys(Class.prototype.modules).length + "_" + Utils.now();
              Class.prototype.modules[name] = module;
              // Prototype
              if (module.proto) {
                Object.keys(module.proto).forEach(function (key) {
                  Class.prototype[key] = module.proto[key];
                });
              }
              // Class
              if (module.static) {
                Object.keys(module.static).forEach(function (key) {
                  Class[key] = module.static[key];
                });
              }
              // Callback
              if (module.install) {
                module.install.apply(Class, params);
              }
              return Class;
            };
            SwiperClass.use = function use(module) {
              var params = [],
                len = arguments.length - 1;
              while (len-- > 0) params[len] = arguments[len + 1];
              var Class = this;
              if (Array.isArray(module)) {
                module.forEach(function (m) {
                  return Class.installModule(m);
                });
                return Class;
              }
              return Class.installModule.apply(Class, [module].concat(params));
            };
            Object.defineProperties(SwiperClass, staticAccessors);
            function updateSize() {
              var swiper = this;
              var width;
              var height;
              var $el = swiper.$el;
              if (typeof swiper.params.width !== 'undefined') {
                width = swiper.params.width;
              } else {
                width = $el[0].clientWidth;
              }
              if (typeof swiper.params.height !== 'undefined') {
                height = swiper.params.height;
              } else {
                height = $el[0].clientHeight;
              }
              if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {
                return;
              }

              // Subtract paddings
              width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);
              height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);
              Utils.extend(swiper, {
                width: width,
                height: height,
                size: swiper.isHorizontal() ? width : height
              });
            }
            function updateSlides() {
              var swiper = this;
              var params = swiper.params;
              var $wrapperEl = swiper.$wrapperEl;
              var swiperSize = swiper.size;
              var rtl = swiper.rtlTranslate;
              var wrongRTL = swiper.wrongRTL;
              var isVirtual = swiper.virtual && params.virtual.enabled;
              var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
              var slides = $wrapperEl.children("." + swiper.params.slideClass);
              var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
              var snapGrid = [];
              var slidesGrid = [];
              var slidesSizesGrid = [];
              var offsetBefore = params.slidesOffsetBefore;
              if (typeof offsetBefore === 'function') {
                offsetBefore = params.slidesOffsetBefore.call(swiper);
              }
              var offsetAfter = params.slidesOffsetAfter;
              if (typeof offsetAfter === 'function') {
                offsetAfter = params.slidesOffsetAfter.call(swiper);
              }
              var previousSnapGridLength = swiper.snapGrid.length;
              var previousSlidesGridLength = swiper.snapGrid.length;
              var spaceBetween = params.spaceBetween;
              var slidePosition = -offsetBefore;
              var prevSlideSize = 0;
              var index = 0;
              if (typeof swiperSize === 'undefined') {
                return;
              }
              if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
                spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;
              }
              swiper.virtualSize = -spaceBetween;

              // reset margins
              if (rtl) {
                slides.css({
                  marginLeft: '',
                  marginTop: ''
                });
              } else {
                slides.css({
                  marginRight: '',
                  marginBottom: ''
                });
              }
              var slidesNumberEvenToRows;
              if (params.slidesPerColumn > 1) {
                if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
                  slidesNumberEvenToRows = slidesLength;
                } else {
                  slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;
                }
                if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {
                  slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);
                }
              }

              // Calc slides
              var slideSize;
              var slidesPerColumn = params.slidesPerColumn;
              var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
              var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);
              for (var i = 0; i < slidesLength; i += 1) {
                slideSize = 0;
                var slide = slides.eq(i);
                if (params.slidesPerColumn > 1) {
                  // Set slides order
                  var newSlideOrderIndex = void 0;
                  var column = void 0;
                  var row = void 0;
                  if (params.slidesPerColumnFill === 'column' || params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {
                    if (params.slidesPerColumnFill === 'column') {
                      column = Math.floor(i / slidesPerColumn);
                      row = i - column * slidesPerColumn;
                      if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) {
                        row += 1;
                        if (row >= slidesPerColumn) {
                          row = 0;
                          column += 1;
                        }
                      }
                    } else {
                      var groupIndex = Math.floor(i / params.slidesPerGroup);
                      row = Math.floor(i / params.slidesPerView) - groupIndex * params.slidesPerColumn;
                      column = i - row * params.slidesPerView - groupIndex * params.slidesPerView;
                    }
                    newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;
                    slide.css({
                      '-webkit-box-ordinal-group': newSlideOrderIndex,
                      '-moz-box-ordinal-group': newSlideOrderIndex,
                      '-ms-flex-order': newSlideOrderIndex,
                      '-webkit-order': newSlideOrderIndex,
                      order: newSlideOrderIndex
                    });
                  } else {
                    row = Math.floor(i / slidesPerRow);
                    column = i - row * slidesPerRow;
                  }
                  slide.css("margin-" + (swiper.isHorizontal() ? 'top' : 'left'), row !== 0 && params.spaceBetween && params.spaceBetween + "px").attr('data-swiper-column', column).attr('data-swiper-row', row);
                }
                if (slide.css('display') === 'none') {
                  continue;
                } // eslint-disable-line

                if (params.slidesPerView === 'auto') {
                  var slideStyles = win.getComputedStyle(slide[0], null);
                  var currentTransform = slide[0].style.transform;
                  var currentWebKitTransform = slide[0].style.webkitTransform;
                  if (currentTransform) {
                    slide[0].style.transform = 'none';
                  }
                  if (currentWebKitTransform) {
                    slide[0].style.webkitTransform = 'none';
                  }
                  if (params.roundLengths) {
                    slideSize = swiper.isHorizontal() ? slide.outerWidth(true) : slide.outerHeight(true);
                  } else {
                    // eslint-disable-next-line
                    if (swiper.isHorizontal()) {
                      var width = parseFloat(slideStyles.getPropertyValue('width'));
                      var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));
                      var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));
                      var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));
                      var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));
                      var boxSizing = slideStyles.getPropertyValue('box-sizing');
                      if (boxSizing && boxSizing === 'border-box' && !Browser.isIE) {
                        slideSize = width + marginLeft + marginRight;
                      } else {
                        slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;
                      }
                    } else {
                      var height = parseFloat(slideStyles.getPropertyValue('height'));
                      var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));
                      var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));
                      var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));
                      var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));
                      var boxSizing$1 = slideStyles.getPropertyValue('box-sizing');
                      if (boxSizing$1 && boxSizing$1 === 'border-box' && !Browser.isIE) {
                        slideSize = height + marginTop + marginBottom;
                      } else {
                        slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;
                      }
                    }
                  }
                  if (currentTransform) {
                    slide[0].style.transform = currentTransform;
                  }
                  if (currentWebKitTransform) {
                    slide[0].style.webkitTransform = currentWebKitTransform;
                  }
                  if (params.roundLengths) {
                    slideSize = Math.floor(slideSize);
                  }
                } else {
                  slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
                  if (params.roundLengths) {
                    slideSize = Math.floor(slideSize);
                  }
                  if (slides[i]) {
                    if (swiper.isHorizontal()) {
                      slides[i].style.width = slideSize + "px";
                    } else {
                      slides[i].style.height = slideSize + "px";
                    }
                  }
                }
                if (slides[i]) {
                  slides[i].swiperSlideSize = slideSize;
                }
                slidesSizesGrid.push(slideSize);
                if (params.centeredSlides) {
                  slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
                  if (prevSlideSize === 0 && i !== 0) {
                    slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
                  }
                  if (i === 0) {
                    slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
                  }
                  if (Math.abs(slidePosition) < 1 / 1000) {
                    slidePosition = 0;
                  }
                  if (params.roundLengths) {
                    slidePosition = Math.floor(slidePosition);
                  }
                  if (index % params.slidesPerGroup === 0) {
                    snapGrid.push(slidePosition);
                  }
                  slidesGrid.push(slidePosition);
                } else {
                  if (params.roundLengths) {
                    slidePosition = Math.floor(slidePosition);
                  }
                  if (index % params.slidesPerGroup === 0) {
                    snapGrid.push(slidePosition);
                  }
                  slidesGrid.push(slidePosition);
                  slidePosition = slidePosition + slideSize + spaceBetween;
                }
                swiper.virtualSize += slideSize + spaceBetween;
                prevSlideSize = slideSize;
                index += 1;
              }
              swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
              var newSlidesGrid;
              if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
                $wrapperEl.css({
                  width: swiper.virtualSize + params.spaceBetween + "px"
                });
              }
              if (!Support.flexbox || params.setWrapperSize) {
                if (swiper.isHorizontal()) {
                  $wrapperEl.css({
                    width: swiper.virtualSize + params.spaceBetween + "px"
                  });
                } else {
                  $wrapperEl.css({
                    height: swiper.virtualSize + params.spaceBetween + "px"
                  });
                }
              }
              if (params.slidesPerColumn > 1) {
                swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;
                swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
                if (swiper.isHorizontal()) {
                  $wrapperEl.css({
                    width: swiper.virtualSize + params.spaceBetween + "px"
                  });
                } else {
                  $wrapperEl.css({
                    height: swiper.virtualSize + params.spaceBetween + "px"
                  });
                }
                if (params.centeredSlides) {
                  newSlidesGrid = [];
                  for (var i$1 = 0; i$1 < snapGrid.length; i$1 += 1) {
                    var slidesGridItem = snapGrid[i$1];
                    if (params.roundLengths) {
                      slidesGridItem = Math.floor(slidesGridItem);
                    }
                    if (snapGrid[i$1] < swiper.virtualSize + snapGrid[0]) {
                      newSlidesGrid.push(slidesGridItem);
                    }
                  }
                  snapGrid = newSlidesGrid;
                }
              }

              // Remove last grid elements depending on width
              if (!params.centeredSlides) {
                newSlidesGrid = [];
                for (var i$2 = 0; i$2 < snapGrid.length; i$2 += 1) {
                  var slidesGridItem$1 = snapGrid[i$2];
                  if (params.roundLengths) {
                    slidesGridItem$1 = Math.floor(slidesGridItem$1);
                  }
                  if (snapGrid[i$2] <= swiper.virtualSize - swiperSize) {
                    newSlidesGrid.push(slidesGridItem$1);
                  }
                }
                snapGrid = newSlidesGrid;
                if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
                  snapGrid.push(swiper.virtualSize - swiperSize);
                }
              }
              if (snapGrid.length === 0) {
                snapGrid = [0];
              }
              if (params.spaceBetween !== 0) {
                if (swiper.isHorizontal()) {
                  if (rtl) {
                    slides.css({
                      marginLeft: spaceBetween + "px"
                    });
                  } else {
                    slides.css({
                      marginRight: spaceBetween + "px"
                    });
                  }
                } else {
                  slides.css({
                    marginBottom: spaceBetween + "px"
                  });
                }
              }
              if (params.centerInsufficientSlides) {
                var allSlidesSize = 0;
                slidesSizesGrid.forEach(function (slideSizeValue) {
                  allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
                });
                allSlidesSize -= params.spaceBetween;
                if (allSlidesSize < swiperSize) {
                  var allSlidesOffset = (swiperSize - allSlidesSize) / 2;
                  snapGrid.forEach(function (snap, snapIndex) {
                    snapGrid[snapIndex] = snap - allSlidesOffset;
                  });
                  slidesGrid.forEach(function (snap, snapIndex) {
                    slidesGrid[snapIndex] = snap + allSlidesOffset;
                  });
                }
              }
              Utils.extend(swiper, {
                slides: slides,
                snapGrid: snapGrid,
                slidesGrid: slidesGrid,
                slidesSizesGrid: slidesSizesGrid
              });
              if (slidesLength !== previousSlidesLength) {
                swiper.emit('slidesLengthChange');
              }
              if (snapGrid.length !== previousSnapGridLength) {
                if (swiper.params.watchOverflow) {
                  swiper.checkOverflow();
                }
                swiper.emit('snapGridLengthChange');
              }
              if (slidesGrid.length !== previousSlidesGridLength) {
                swiper.emit('slidesGridLengthChange');
              }
              if (params.watchSlidesProgress || params.watchSlidesVisibility) {
                swiper.updateSlidesOffset();
              }
            }
            function updateAutoHeight(speed) {
              var swiper = this;
              var activeSlides = [];
              var newHeight = 0;
              var i;
              if (typeof speed === 'number') {
                swiper.setTransition(speed);
              } else if (speed === true) {
                swiper.setTransition(swiper.params.speed);
              }
              // Find slides currently in view
              if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
                for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
                  var index = swiper.activeIndex + i;
                  if (index > swiper.slides.length) {
                    break;
                  }
                  activeSlides.push(swiper.slides.eq(index)[0]);
                }
              } else {
                activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);
              }

              // Find new height from highest slide in view
              for (i = 0; i < activeSlides.length; i += 1) {
                if (typeof activeSlides[i] !== 'undefined') {
                  var height = activeSlides[i].offsetHeight;
                  newHeight = height > newHeight ? height : newHeight;
                }
              }

              // Update Height
              if (newHeight) {
                swiper.$wrapperEl.css('height', newHeight + "px");
              }
            }
            function updateSlidesOffset() {
              var swiper = this;
              var slides = swiper.slides;
              for (var i = 0; i < slides.length; i += 1) {
                slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;
              }
            }
            function updateSlidesProgress(translate) {
              if (translate === void 0) translate = this && this.translate || 0;
              var swiper = this;
              var params = swiper.params;
              var slides = swiper.slides;
              var rtl = swiper.rtlTranslate;
              if (slides.length === 0) {
                return;
              }
              if (typeof slides[0].swiperSlideOffset === 'undefined') {
                swiper.updateSlidesOffset();
              }
              var offsetCenter = -translate;
              if (rtl) {
                offsetCenter = translate;
              }

              // Visible Slides
              slides.removeClass(params.slideVisibleClass);
              swiper.visibleSlidesIndexes = [];
              swiper.visibleSlides = [];
              for (var i = 0; i < slides.length; i += 1) {
                var slide = slides[i];
                var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - slide.swiperSlideOffset) / (slide.swiperSlideSize + params.spaceBetween);
                if (params.watchSlidesVisibility) {
                  var slideBefore = -(offsetCenter - slide.swiperSlideOffset);
                  var slideAfter = slideBefore + swiper.slidesSizesGrid[i];
                  var isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;
                  if (isVisible) {
                    swiper.visibleSlides.push(slide);
                    swiper.visibleSlidesIndexes.push(i);
                    slides.eq(i).addClass(params.slideVisibleClass);
                  }
                }
                slide.progress = rtl ? -slideProgress : slideProgress;
              }
              swiper.visibleSlides = $(swiper.visibleSlides);
            }
            function updateProgress(translate) {
              if (translate === void 0) translate = this && this.translate || 0;
              var swiper = this;
              var params = swiper.params;
              var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
              var progress = swiper.progress;
              var isBeginning = swiper.isBeginning;
              var isEnd = swiper.isEnd;
              var wasBeginning = isBeginning;
              var wasEnd = isEnd;
              if (translatesDiff === 0) {
                progress = 0;
                isBeginning = true;
                isEnd = true;
              } else {
                progress = (translate - swiper.minTranslate()) / translatesDiff;
                isBeginning = progress <= 0;
                isEnd = progress >= 1;
              }
              Utils.extend(swiper, {
                progress: progress,
                isBeginning: isBeginning,
                isEnd: isEnd
              });
              if (params.watchSlidesProgress || params.watchSlidesVisibility) {
                swiper.updateSlidesProgress(translate);
              }
              if (isBeginning && !wasBeginning) {
                swiper.emit('reachBeginning toEdge');
              }
              if (isEnd && !wasEnd) {
                swiper.emit('reachEnd toEdge');
              }
              if (wasBeginning && !isBeginning || wasEnd && !isEnd) {
                swiper.emit('fromEdge');
              }
              swiper.emit('progress', progress);
            }
            function updateSlidesClasses() {
              var swiper = this;
              var slides = swiper.slides;
              var params = swiper.params;
              var $wrapperEl = swiper.$wrapperEl;
              var activeIndex = swiper.activeIndex;
              var realIndex = swiper.realIndex;
              var isVirtual = swiper.virtual && params.virtual.enabled;
              slides.removeClass(params.slideActiveClass + " " + params.slideNextClass + " " + params.slidePrevClass + " " + params.slideDuplicateActiveClass + " " + params.slideDuplicateNextClass + " " + params.slideDuplicatePrevClass);
              var activeSlide;
              if (isVirtual) {
                activeSlide = swiper.$wrapperEl.find("." + params.slideClass + "[data-swiper-slide-index=\"" + activeIndex + "\"]");
              } else {
                activeSlide = slides.eq(activeIndex);
              }

              // Active classes
              activeSlide.addClass(params.slideActiveClass);
              if (params.loop) {
                // Duplicate to all looped slides
                if (activeSlide.hasClass(params.slideDuplicateClass)) {
                  $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + realIndex + "\"]").addClass(params.slideDuplicateActiveClass);
                } else {
                  $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + realIndex + "\"]").addClass(params.slideDuplicateActiveClass);
                }
              }
              // Next Slide
              var nextSlide = activeSlide.nextAll("." + params.slideClass).eq(0).addClass(params.slideNextClass);
              if (params.loop && nextSlide.length === 0) {
                nextSlide = slides.eq(0);
                nextSlide.addClass(params.slideNextClass);
              }
              // Prev Slide
              var prevSlide = activeSlide.prevAll("." + params.slideClass).eq(0).addClass(params.slidePrevClass);
              if (params.loop && prevSlide.length === 0) {
                prevSlide = slides.eq(-1);
                prevSlide.addClass(params.slidePrevClass);
              }
              if (params.loop) {
                // Duplicate to all looped slides
                if (nextSlide.hasClass(params.slideDuplicateClass)) {
                  $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + nextSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicateNextClass);
                } else {
                  $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + nextSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicateNextClass);
                }
                if (prevSlide.hasClass(params.slideDuplicateClass)) {
                  $wrapperEl.children("." + params.slideClass + ":not(." + params.slideDuplicateClass + ")[data-swiper-slide-index=\"" + prevSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicatePrevClass);
                } else {
                  $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + "[data-swiper-slide-index=\"" + prevSlide.attr('data-swiper-slide-index') + "\"]").addClass(params.slideDuplicatePrevClass);
                }
              }
            }
            function updateActiveIndex(newActiveIndex) {
              var swiper = this;
              var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
              var slidesGrid = swiper.slidesGrid;
              var snapGrid = swiper.snapGrid;
              var params = swiper.params;
              var previousIndex = swiper.activeIndex;
              var previousRealIndex = swiper.realIndex;
              var previousSnapIndex = swiper.snapIndex;
              var activeIndex = newActiveIndex;
              var snapIndex;
              if (typeof activeIndex === 'undefined') {
                for (var i = 0; i < slidesGrid.length; i += 1) {
                  if (typeof slidesGrid[i + 1] !== 'undefined') {
                    if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {
                      activeIndex = i;
                    } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
                      activeIndex = i + 1;
                    }
                  } else if (translate >= slidesGrid[i]) {
                    activeIndex = i;
                  }
                }
                // Normalize slideIndex
                if (params.normalizeSlideIndex) {
                  if (activeIndex < 0 || typeof activeIndex === 'undefined') {
                    activeIndex = 0;
                  }
                }
              }
              if (snapGrid.indexOf(translate) >= 0) {
                snapIndex = snapGrid.indexOf(translate);
              } else {
                snapIndex = Math.floor(activeIndex / params.slidesPerGroup);
              }
              if (snapIndex >= snapGrid.length) {
                snapIndex = snapGrid.length - 1;
              }
              if (activeIndex === previousIndex) {
                if (snapIndex !== previousSnapIndex) {
                  swiper.snapIndex = snapIndex;
                  swiper.emit('snapIndexChange');
                }
                return;
              }

              // Get real index
              var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);
              Utils.extend(swiper, {
                snapIndex: snapIndex,
                realIndex: realIndex,
                previousIndex: previousIndex,
                activeIndex: activeIndex
              });
              swiper.emit('activeIndexChange');
              swiper.emit('snapIndexChange');
              if (previousRealIndex !== realIndex) {
                swiper.emit('realIndexChange');
              }
              if (swiper.initialized || swiper.runCallbacksOnInit) {
                swiper.emit('slideChange');
              }
            }
            function updateClickedSlide(e) {
              var swiper = this;
              var params = swiper.params;
              var slide = $(e.target).closest("." + params.slideClass)[0];
              var slideFound = false;
              if (slide) {
                for (var i = 0; i < swiper.slides.length; i += 1) {
                  if (swiper.slides[i] === slide) {
                    slideFound = true;
                  }
                }
              }
              if (slide && slideFound) {
                swiper.clickedSlide = slide;
                if (swiper.virtual && swiper.params.virtual.enabled) {
                  swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);
                } else {
                  swiper.clickedIndex = $(slide).index();
                }
              } else {
                swiper.clickedSlide = undefined;
                swiper.clickedIndex = undefined;
                return;
              }
              if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
                swiper.slideToClickedSlide();
              }
            }
            var update = {
              updateSize: updateSize,
              updateSlides: updateSlides,
              updateAutoHeight: updateAutoHeight,
              updateSlidesOffset: updateSlidesOffset,
              updateSlidesProgress: updateSlidesProgress,
              updateProgress: updateProgress,
              updateSlidesClasses: updateSlidesClasses,
              updateActiveIndex: updateActiveIndex,
              updateClickedSlide: updateClickedSlide
            };
            function getTranslate(axis) {
              if (axis === void 0) axis = this.isHorizontal() ? 'x' : 'y';
              var swiper = this;
              var params = swiper.params;
              var rtl = swiper.rtlTranslate;
              var translate = swiper.translate;
              var $wrapperEl = swiper.$wrapperEl;
              if (params.virtualTranslate) {
                return rtl ? -translate : translate;
              }
              var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);
              if (rtl) {
                currentTranslate = -currentTranslate;
              }
              return currentTranslate || 0;
            }
            function setTranslate(translate, byController) {
              var swiper = this;
              var rtl = swiper.rtlTranslate;
              var params = swiper.params;
              var $wrapperEl = swiper.$wrapperEl;
              var progress = swiper.progress;
              var x = 0;
              var y = 0;
              var z = 0;
              if (swiper.isHorizontal()) {
                x = rtl ? -translate : translate;
              } else {
                y = translate;
              }
              if (params.roundLengths) {
                x = Math.floor(x);
                y = Math.floor(y);
              }
              if (!params.virtualTranslate) {
                if (Support.transforms3d) {
                  $wrapperEl.transform("translate3d(" + x + "px, " + y + "px, " + z + "px)");
                } else {
                  $wrapperEl.transform("translate(" + x + "px, " + y + "px)");
                }
              }
              swiper.previousTranslate = swiper.translate;
              swiper.translate = swiper.isHorizontal() ? x : y;

              // Check if we need to update progress
              var newProgress;
              var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
              if (translatesDiff === 0) {
                newProgress = 0;
              } else {
                newProgress = (translate - swiper.minTranslate()) / translatesDiff;
              }
              if (newProgress !== progress) {
                swiper.updateProgress(translate);
              }
              swiper.emit('setTranslate', swiper.translate, byController);
            }
            function minTranslate() {
              return -this.snapGrid[0];
            }
            function maxTranslate() {
              return -this.snapGrid[this.snapGrid.length - 1];
            }
            var translate = {
              getTranslate: getTranslate,
              setTranslate: setTranslate,
              minTranslate: minTranslate,
              maxTranslate: maxTranslate
            };
            function setTransition(duration, byController) {
              var swiper = this;
              swiper.$wrapperEl.transition(duration);
              swiper.emit('setTransition', duration, byController);
            }
            function transitionStart(runCallbacks, direction) {
              if (runCallbacks === void 0) runCallbacks = true;
              var swiper = this;
              var activeIndex = swiper.activeIndex;
              var params = swiper.params;
              var previousIndex = swiper.previousIndex;
              if (params.autoHeight) {
                swiper.updateAutoHeight();
              }
              var dir = direction;
              if (!dir) {
                if (activeIndex > previousIndex) {
                  dir = 'next';
                } else if (activeIndex < previousIndex) {
                  dir = 'prev';
                } else {
                  dir = 'reset';
                }
              }
              swiper.emit('transitionStart');
              if (runCallbacks && activeIndex !== previousIndex) {
                if (dir === 'reset') {
                  swiper.emit('slideResetTransitionStart');
                  return;
                }
                swiper.emit('slideChangeTransitionStart');
                if (dir === 'next') {
                  swiper.emit('slideNextTransitionStart');
                } else {
                  swiper.emit('slidePrevTransitionStart');
                }
              }
            }
            function transitionEnd$1(runCallbacks, direction) {
              if (runCallbacks === void 0) runCallbacks = true;
              var swiper = this;
              var activeIndex = swiper.activeIndex;
              var previousIndex = swiper.previousIndex;
              swiper.animating = false;
              swiper.setTransition(0);
              var dir = direction;
              if (!dir) {
                if (activeIndex > previousIndex) {
                  dir = 'next';
                } else if (activeIndex < previousIndex) {
                  dir = 'prev';
                } else {
                  dir = 'reset';
                }
              }
              swiper.emit('transitionEnd');
              if (runCallbacks && activeIndex !== previousIndex) {
                if (dir === 'reset') {
                  swiper.emit('slideResetTransitionEnd');
                  return;
                }
                swiper.emit('slideChangeTransitionEnd');
                if (dir === 'next') {
                  swiper.emit('slideNextTransitionEnd');
                } else {
                  swiper.emit('slidePrevTransitionEnd');
                }
              }
            }
            var transition$1 = {
              setTransition: setTransition,
              transitionStart: transitionStart,
              transitionEnd: transitionEnd$1
            };
            function slideTo(index, speed, runCallbacks, internal) {
              if (index === void 0) index = 0;
              if (speed === void 0) speed = this.params.speed;
              if (runCallbacks === void 0) runCallbacks = true;
              var swiper = this;
              var slideIndex = index;
              if (slideIndex < 0) {
                slideIndex = 0;
              }
              var params = swiper.params;
              var snapGrid = swiper.snapGrid;
              var slidesGrid = swiper.slidesGrid;
              var previousIndex = swiper.previousIndex;
              var activeIndex = swiper.activeIndex;
              var rtl = swiper.rtlTranslate;
              if (swiper.animating && params.preventInteractionOnTransition) {
                return false;
              }
              var snapIndex = Math.floor(slideIndex / params.slidesPerGroup);
              if (snapIndex >= snapGrid.length) {
                snapIndex = snapGrid.length - 1;
              }
              if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
                swiper.emit('beforeSlideChangeStart');
              }
              var translate = -snapGrid[snapIndex];

              // Update progress
              swiper.updateProgress(translate);

              // Normalize slideIndex
              if (params.normalizeSlideIndex) {
                for (var i = 0; i < slidesGrid.length; i += 1) {
                  if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {
                    slideIndex = i;
                  }
                }
              }
              // Directions locks
              if (swiper.initialized && slideIndex !== activeIndex) {
                if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
                  return false;
                }
                if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
                  if ((activeIndex || 0) !== slideIndex) {
                    return false;
                  }
                }
              }
              var direction;
              if (slideIndex > activeIndex) {
                direction = 'next';
              } else if (slideIndex < activeIndex) {
                direction = 'prev';
              } else {
                direction = 'reset';
              }

              // Update Index
              if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {
                swiper.updateActiveIndex(slideIndex);
                // Update Height
                if (params.autoHeight) {
                  swiper.updateAutoHeight();
                }
                swiper.updateSlidesClasses();
                if (params.effect !== 'slide') {
                  swiper.setTranslate(translate);
                }
                if (direction !== 'reset') {
                  swiper.transitionStart(runCallbacks, direction);
                  swiper.transitionEnd(runCallbacks, direction);
                }
                return false;
              }
              if (speed === 0 || !Support.transition) {
                swiper.setTransition(0);
                swiper.setTranslate(translate);
                swiper.updateActiveIndex(slideIndex);
                swiper.updateSlidesClasses();
                swiper.emit('beforeTransitionStart', speed, internal);
                swiper.transitionStart(runCallbacks, direction);
                swiper.transitionEnd(runCallbacks, direction);
              } else {
                swiper.setTransition(speed);
                swiper.setTranslate(translate);
                swiper.updateActiveIndex(slideIndex);
                swiper.updateSlidesClasses();
                swiper.emit('beforeTransitionStart', speed, internal);
                swiper.transitionStart(runCallbacks, direction);
                if (!swiper.animating) {
                  swiper.animating = true;
                  if (!swiper.onSlideToWrapperTransitionEnd) {
                    swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
                      if (!swiper || swiper.destroyed) {
                        return;
                      }
                      if (e.target !== this) {
                        return;
                      }
                      swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
                      swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
                      swiper.onSlideToWrapperTransitionEnd = null;
                      delete swiper.onSlideToWrapperTransitionEnd;
                      swiper.transitionEnd(runCallbacks, direction);
                    };
                  }
                  swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
                  swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
                }
              }
              return true;
            }
            function slideToLoop(index, speed, runCallbacks, internal) {
              if (index === void 0) index = 0;
              if (speed === void 0) speed = this.params.speed;
              if (runCallbacks === void 0) runCallbacks = true;
              var swiper = this;
              var newIndex = index;
              if (swiper.params.loop) {
                newIndex += swiper.loopedSlides;
              }
              return swiper.slideTo(newIndex, speed, runCallbacks, internal);
            }

            /* eslint no-unused-vars: "off" */
            function slideNext(speed, runCallbacks, internal) {
              if (speed === void 0) speed = this.params.speed;
              if (runCallbacks === void 0) runCallbacks = true;
              var swiper = this;
              var params = swiper.params;
              var animating = swiper.animating;
              if (params.loop) {
                if (animating) {
                  return false;
                }
                swiper.loopFix();
                // eslint-disable-next-line
                swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
                return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);
              }
              return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);
            }

            /* eslint no-unused-vars: "off" */
            function slidePrev(speed, runCallbacks, internal) {
              if (speed === void 0) speed = this.params.speed;
              if (runCallbacks === void 0) runCallbacks = true;
              var swiper = this;
              var params = swiper.params;
              var animating = swiper.animating;
              var snapGrid = swiper.snapGrid;
              var slidesGrid = swiper.slidesGrid;
              var rtlTranslate = swiper.rtlTranslate;
              if (params.loop) {
                if (animating) {
                  return false;
                }
                swiper.loopFix();
                // eslint-disable-next-line
                swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
              }
              var translate = rtlTranslate ? swiper.translate : -swiper.translate;
              function normalize(val) {
                if (val < 0) {
                  return -Math.floor(Math.abs(val));
                }
                return Math.floor(val);
              }
              var normalizedTranslate = normalize(translate);
              var normalizedSnapGrid = snapGrid.map(function (val) {
                return normalize(val);
              });
              slidesGrid.map(function (val) {
                return normalize(val);
              });
              snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
              var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
              var prevIndex;
              if (typeof prevSnap !== 'undefined') {
                prevIndex = slidesGrid.indexOf(prevSnap);
                if (prevIndex < 0) {
                  prevIndex = swiper.activeIndex - 1;
                }
              }
              return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
            }

            /* eslint no-unused-vars: "off" */
            function slideReset(speed, runCallbacks, internal) {
              if (speed === void 0) speed = this.params.speed;
              if (runCallbacks === void 0) runCallbacks = true;
              var swiper = this;
              return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
            }

            /* eslint no-unused-vars: "off" */
            function slideToClosest(speed, runCallbacks, internal) {
              if (speed === void 0) speed = this.params.speed;
              if (runCallbacks === void 0) runCallbacks = true;
              var swiper = this;
              var index = swiper.activeIndex;
              var snapIndex = Math.floor(index / swiper.params.slidesPerGroup);
              if (snapIndex < swiper.snapGrid.length - 1) {
                var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
                var currentSnap = swiper.snapGrid[snapIndex];
                var nextSnap = swiper.snapGrid[snapIndex + 1];
                if (translate - currentSnap > (nextSnap - currentSnap) / 2) {
                  index = swiper.params.slidesPerGroup;
                }
              }
              return swiper.slideTo(index, speed, runCallbacks, internal);
            }
            function slideToClickedSlide() {
              var swiper = this;
              var params = swiper.params;
              var $wrapperEl = swiper.$wrapperEl;
              var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
              var slideToIndex = swiper.clickedIndex;
              var realIndex;
              if (params.loop) {
                if (swiper.animating) {
                  return;
                }
                realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);
                if (params.centeredSlides) {
                  if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {
                    swiper.loopFix();
                    slideToIndex = $wrapperEl.children("." + params.slideClass + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + params.slideDuplicateClass + ")").eq(0).index();
                    Utils.nextTick(function () {
                      swiper.slideTo(slideToIndex);
                    });
                  } else {
                    swiper.slideTo(slideToIndex);
                  }
                } else if (slideToIndex > swiper.slides.length - slidesPerView) {
                  swiper.loopFix();
                  slideToIndex = $wrapperEl.children("." + params.slideClass + "[data-swiper-slide-index=\"" + realIndex + "\"]:not(." + params.slideDuplicateClass + ")").eq(0).index();
                  Utils.nextTick(function () {
                    swiper.slideTo(slideToIndex);
                  });
                } else {
                  swiper.slideTo(slideToIndex);
                }
              } else {
                swiper.slideTo(slideToIndex);
              }
            }
            var slide = {
              slideTo: slideTo,
              slideToLoop: slideToLoop,
              slideNext: slideNext,
              slidePrev: slidePrev,
              slideReset: slideReset,
              slideToClosest: slideToClosest,
              slideToClickedSlide: slideToClickedSlide
            };
            function loopCreate() {
              var swiper = this;
              var params = swiper.params;
              var $wrapperEl = swiper.$wrapperEl;
              // Remove duplicated slides
              $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass).remove();
              var slides = $wrapperEl.children("." + params.slideClass);
              if (params.loopFillGroupWithBlank) {
                var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;
                if (blankSlidesNum !== params.slidesPerGroup) {
                  for (var i = 0; i < blankSlidesNum; i += 1) {
                    var blankNode = $(doc.createElement('div')).addClass(params.slideClass + " " + params.slideBlankClass);
                    $wrapperEl.append(blankNode);
                  }
                  slides = $wrapperEl.children("." + params.slideClass);
                }
              }
              if (params.slidesPerView === 'auto' && !params.loopedSlides) {
                params.loopedSlides = slides.length;
              }
              swiper.loopedSlides = parseInt(params.loopedSlides || params.slidesPerView, 10);
              swiper.loopedSlides += params.loopAdditionalSlides;
              if (swiper.loopedSlides > slides.length) {
                swiper.loopedSlides = slides.length;
              }
              var prependSlides = [];
              var appendSlides = [];
              slides.each(function (index, el) {
                var slide = $(el);
                if (index < swiper.loopedSlides) {
                  appendSlides.push(el);
                }
                if (index < slides.length && index >= slides.length - swiper.loopedSlides) {
                  prependSlides.push(el);
                }
                slide.attr('data-swiper-slide-index', index);
              });
              for (var i$1 = 0; i$1 < appendSlides.length; i$1 += 1) {
                $wrapperEl.append($(appendSlides[i$1].cloneNode(true)).addClass(params.slideDuplicateClass));
              }
              for (var i$2 = prependSlides.length - 1; i$2 >= 0; i$2 -= 1) {
                $wrapperEl.prepend($(prependSlides[i$2].cloneNode(true)).addClass(params.slideDuplicateClass));
              }
            }
            function loopFix() {
              var swiper = this;
              var params = swiper.params;
              var activeIndex = swiper.activeIndex;
              var slides = swiper.slides;
              var loopedSlides = swiper.loopedSlides;
              var allowSlidePrev = swiper.allowSlidePrev;
              var allowSlideNext = swiper.allowSlideNext;
              var snapGrid = swiper.snapGrid;
              var rtl = swiper.rtlTranslate;
              var newIndex;
              swiper.allowSlidePrev = true;
              swiper.allowSlideNext = true;
              var snapTranslate = -snapGrid[activeIndex];
              var diff = snapTranslate - swiper.getTranslate();

              // Fix For Negative Oversliding
              if (activeIndex < loopedSlides) {
                newIndex = slides.length - loopedSlides * 3 + activeIndex;
                newIndex += loopedSlides;
                var slideChanged = swiper.slideTo(newIndex, 0, false, true);
                if (slideChanged && diff !== 0) {
                  swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
                }
              } else if (params.slidesPerView === 'auto' && activeIndex >= loopedSlides * 2 || activeIndex >= slides.length - loopedSlides) {
                // Fix For Positive Oversliding
                newIndex = -slides.length + activeIndex + loopedSlides;
                newIndex += loopedSlides;
                var slideChanged$1 = swiper.slideTo(newIndex, 0, false, true);
                if (slideChanged$1 && diff !== 0) {
                  swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
                }
              }
              swiper.allowSlidePrev = allowSlidePrev;
              swiper.allowSlideNext = allowSlideNext;
            }
            function loopDestroy() {
              var swiper = this;
              var $wrapperEl = swiper.$wrapperEl;
              var params = swiper.params;
              var slides = swiper.slides;
              $wrapperEl.children("." + params.slideClass + "." + params.slideDuplicateClass + ",." + params.slideClass + "." + params.slideBlankClass).remove();
              slides.removeAttr('data-swiper-slide-index');
            }
            var loop = {
              loopCreate: loopCreate,
              loopFix: loopFix,
              loopDestroy: loopDestroy
            };
            function setGrabCursor(moving) {
              var swiper = this;
              if (Support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked) {
                return;
              }
              var el = swiper.el;
              el.style.cursor = 'move';
              el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
              el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
              el.style.cursor = moving ? 'grabbing' : 'grab';
            }
            function unsetGrabCursor() {
              var swiper = this;
              if (Support.touch || swiper.params.watchOverflow && swiper.isLocked) {
                return;
              }
              swiper.el.style.cursor = '';
            }
            var grabCursor = {
              setGrabCursor: setGrabCursor,
              unsetGrabCursor: unsetGrabCursor
            };
            function appendSlide(slides) {
              var swiper = this;
              var $wrapperEl = swiper.$wrapperEl;
              var params = swiper.params;
              if (params.loop) {
                swiper.loopDestroy();
              }
              if (_typeof(slides) === 'object' && 'length' in slides) {
                for (var i = 0; i < slides.length; i += 1) {
                  if (slides[i]) {
                    $wrapperEl.append(slides[i]);
                  }
                }
              } else {
                $wrapperEl.append(slides);
              }
              if (params.loop) {
                swiper.loopCreate();
              }
              if (!(params.observer && Support.observer)) {
                swiper.update();
              }
            }
            function prependSlide(slides) {
              var swiper = this;
              var params = swiper.params;
              var $wrapperEl = swiper.$wrapperEl;
              var activeIndex = swiper.activeIndex;
              if (params.loop) {
                swiper.loopDestroy();
              }
              var newActiveIndex = activeIndex + 1;
              if (_typeof(slides) === 'object' && 'length' in slides) {
                for (var i = 0; i < slides.length; i += 1) {
                  if (slides[i]) {
                    $wrapperEl.prepend(slides[i]);
                  }
                }
                newActiveIndex = activeIndex + slides.length;
              } else {
                $wrapperEl.prepend(slides);
              }
              if (params.loop) {
                swiper.loopCreate();
              }
              if (!(params.observer && Support.observer)) {
                swiper.update();
              }
              swiper.slideTo(newActiveIndex, 0, false);
            }
            function addSlide(index, slides) {
              var swiper = this;
              var $wrapperEl = swiper.$wrapperEl;
              var params = swiper.params;
              var activeIndex = swiper.activeIndex;
              var activeIndexBuffer = activeIndex;
              if (params.loop) {
                activeIndexBuffer -= swiper.loopedSlides;
                swiper.loopDestroy();
                swiper.slides = $wrapperEl.children("." + params.slideClass);
              }
              var baseLength = swiper.slides.length;
              if (index <= 0) {
                swiper.prependSlide(slides);
                return;
              }
              if (index >= baseLength) {
                swiper.appendSlide(slides);
                return;
              }
              var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
              var slidesBuffer = [];
              for (var i = baseLength - 1; i >= index; i -= 1) {
                var currentSlide = swiper.slides.eq(i);
                currentSlide.remove();
                slidesBuffer.unshift(currentSlide);
              }
              if (_typeof(slides) === 'object' && 'length' in slides) {
                for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {
                  if (slides[i$1]) {
                    $wrapperEl.append(slides[i$1]);
                  }
                }
                newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
              } else {
                $wrapperEl.append(slides);
              }
              for (var i$2 = 0; i$2 < slidesBuffer.length; i$2 += 1) {
                $wrapperEl.append(slidesBuffer[i$2]);
              }
              if (params.loop) {
                swiper.loopCreate();
              }
              if (!(params.observer && Support.observer)) {
                swiper.update();
              }
              if (params.loop) {
                swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
              } else {
                swiper.slideTo(newActiveIndex, 0, false);
              }
            }
            function removeSlide(slidesIndexes) {
              var swiper = this;
              var params = swiper.params;
              var $wrapperEl = swiper.$wrapperEl;
              var activeIndex = swiper.activeIndex;
              var activeIndexBuffer = activeIndex;
              if (params.loop) {
                activeIndexBuffer -= swiper.loopedSlides;
                swiper.loopDestroy();
                swiper.slides = $wrapperEl.children("." + params.slideClass);
              }
              var newActiveIndex = activeIndexBuffer;
              var indexToRemove;
              if (_typeof(slidesIndexes) === 'object' && 'length' in slidesIndexes) {
                for (var i = 0; i < slidesIndexes.length; i += 1) {
                  indexToRemove = slidesIndexes[i];
                  if (swiper.slides[indexToRemove]) {
                    swiper.slides.eq(indexToRemove).remove();
                  }
                  if (indexToRemove < newActiveIndex) {
                    newActiveIndex -= 1;
                  }
                }
                newActiveIndex = Math.max(newActiveIndex, 0);
              } else {
                indexToRemove = slidesIndexes;
                if (swiper.slides[indexToRemove]) {
                  swiper.slides.eq(indexToRemove).remove();
                }
                if (indexToRemove < newActiveIndex) {
                  newActiveIndex -= 1;
                }
                newActiveIndex = Math.max(newActiveIndex, 0);
              }
              if (params.loop) {
                swiper.loopCreate();
              }
              if (!(params.observer && Support.observer)) {
                swiper.update();
              }
              if (params.loop) {
                swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
              } else {
                swiper.slideTo(newActiveIndex, 0, false);
              }
            }
            function removeAllSlides() {
              var swiper = this;
              var slidesIndexes = [];
              for (var i = 0; i < swiper.slides.length; i += 1) {
                slidesIndexes.push(i);
              }
              swiper.removeSlide(slidesIndexes);
            }
            var manipulation = {
              appendSlide: appendSlide,
              prependSlide: prependSlide,
              addSlide: addSlide,
              removeSlide: removeSlide,
              removeAllSlides: removeAllSlides
            };
            var Device = function Device() {
              var ua = win.navigator.userAgent;
              var device = {
                ios: false,
                android: false,
                androidChrome: false,
                desktop: false,
                windows: false,
                iphone: false,
                ipod: false,
                ipad: false,
                cordova: win.cordova || win.phonegap,
                phonegap: win.cordova || win.phonegap
              };
              var windows = ua.match(/(Windows Phone);?[\s\/]+([\d.]+)?/); // eslint-disable-line
              var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
              var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
              var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
              var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);

              // Windows
              if (windows) {
                device.os = 'windows';
                device.osVersion = windows[2];
                device.windows = true;
              }
              // Android
              if (android && !windows) {
                device.os = 'android';
                device.osVersion = android[2];
                device.android = true;
                device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;
              }
              if (ipad || iphone || ipod) {
                device.os = 'ios';
                device.ios = true;
              }
              // iOS
              if (iphone && !ipod) {
                device.osVersion = iphone[2].replace(/_/g, '.');
                device.iphone = true;
              }
              if (ipad) {
                device.osVersion = ipad[2].replace(/_/g, '.');
                device.ipad = true;
              }
              if (ipod) {
                device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
                device.iphone = true;
              }
              // iOS 8+ changed UA
              if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {
                if (device.osVersion.split('.')[0] === '10') {
                  device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];
                }
              }

              // Desktop
              device.desktop = !(device.os || device.android || device.webView);

              // Webview
              device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);

              // Minimal UI
              if (device.os && device.os === 'ios') {
                var osVersionArr = device.osVersion.split('.');
                var metaViewport = doc.querySelector('meta[name="viewport"]');
                device.minimalUi = !device.webView && (ipod || iphone) && (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7) && metaViewport && metaViewport.getAttribute('content').indexOf('minimal-ui') >= 0;
              }

              // Pixel Ratio
              device.pixelRatio = win.devicePixelRatio || 1;

              // Export object
              return device;
            }();
            function onTouchStart(event) {
              var swiper = this;
              var data = swiper.touchEventsData;
              var params = swiper.params;
              var touches = swiper.touches;
              if (swiper.animating && params.preventInteractionOnTransition) {
                return;
              }
              var e = event;
              if (e.originalEvent) {
                e = e.originalEvent;
              }
              data.isTouchEvent = e.type === 'touchstart';
              if (!data.isTouchEvent && 'which' in e && e.which === 3) {
                return;
              }
              if (!data.isTouchEvent && 'button' in e && e.button > 0) {
                return;
              }
              if (data.isTouched && data.isMoved) {
                return;
              }
              if (params.noSwiping && $(e.target).closest(params.noSwipingSelector ? params.noSwipingSelector : "." + params.noSwipingClass)[0]) {
                swiper.allowClick = true;
                return;
              }
              if (params.swipeHandler) {
                if (!$(e).closest(params.swipeHandler)[0]) {
                  return;
                }
              }
              touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
              touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
              var startX = touches.currentX;
              var startY = touches.currentY;

              // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore

              var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
              var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
              if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= win.screen.width - edgeSwipeThreshold)) {
                return;
              }
              Utils.extend(data, {
                isTouched: true,
                isMoved: false,
                allowTouchCallbacks: true,
                isScrolling: undefined,
                startMoving: undefined
              });
              touches.startX = startX;
              touches.startY = startY;
              data.touchStartTime = Utils.now();
              swiper.allowClick = true;
              swiper.updateSize();
              swiper.swipeDirection = undefined;
              if (params.threshold > 0) {
                data.allowThresholdMove = false;
              }
              if (e.type !== 'touchstart') {
                var preventDefault = true;
                if ($(e.target).is(data.formElements)) {
                  preventDefault = false;
                }
                if (doc.activeElement && $(doc.activeElement).is(data.formElements) && doc.activeElement !== e.target) {
                  doc.activeElement.blur();
                }
                var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
                if (params.touchStartForcePreventDefault || shouldPreventDefault) {
                  e.preventDefault();
                }
              }
              swiper.emit('touchStart', e);
            }
            function onTouchMove(event) {
              var swiper = this;
              var data = swiper.touchEventsData;
              var params = swiper.params;
              var touches = swiper.touches;
              var rtl = swiper.rtlTranslate;
              var e = event;
              if (e.originalEvent) {
                e = e.originalEvent;
              }
              if (!data.isTouched) {
                if (data.startMoving && data.isScrolling) {
                  swiper.emit('touchMoveOpposite', e);
                }
                return;
              }
              if (data.isTouchEvent && e.type === 'mousemove') {
                return;
              }
              var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
              var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
              if (e.preventedByNestedSwiper) {
                touches.startX = pageX;
                touches.startY = pageY;
                return;
              }
              if (!swiper.allowTouchMove) {
                // isMoved = true;
                swiper.allowClick = false;
                if (data.isTouched) {
                  Utils.extend(touches, {
                    startX: pageX,
                    startY: pageY,
                    currentX: pageX,
                    currentY: pageY
                  });
                  data.touchStartTime = Utils.now();
                }
                return;
              }
              if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
                if (swiper.isVertical()) {
                  // Vertical
                  if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {
                    data.isTouched = false;
                    data.isMoved = false;
                    return;
                  }
                } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {
                  return;
                }
              }
              if (data.isTouchEvent && doc.activeElement) {
                if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {
                  data.isMoved = true;
                  swiper.allowClick = false;
                  return;
                }
              }
              if (data.allowTouchCallbacks) {
                swiper.emit('touchMove', e);
              }
              if (e.targetTouches && e.targetTouches.length > 1) {
                return;
              }
              touches.currentX = pageX;
              touches.currentY = pageY;
              var diffX = touches.currentX - touches.startX;
              var diffY = touches.currentY - touches.startY;
              if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) {
                return;
              }
              if (typeof data.isScrolling === 'undefined') {
                var touchAngle;
                if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {
                  data.isScrolling = false;
                } else {
                  // eslint-disable-next-line
                  if (diffX * diffX + diffY * diffY >= 25) {
                    touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;
                    data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;
                  }
                }
              }
              if (data.isScrolling) {
                swiper.emit('touchMoveOpposite', e);
              }
              if (typeof data.startMoving === 'undefined') {
                if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
                  data.startMoving = true;
                }
              }
              if (data.isScrolling) {
                data.isTouched = false;
                return;
              }
              if (!data.startMoving) {
                return;
              }
              swiper.allowClick = false;
              e.preventDefault();
              if (params.touchMoveStopPropagation && !params.nested) {
                e.stopPropagation();
              }
              if (!data.isMoved) {
                if (params.loop) {
                  swiper.loopFix();
                }
                data.startTranslate = swiper.getTranslate();
                swiper.setTransition(0);
                if (swiper.animating) {
                  swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');
                }
                data.allowMomentumBounce = false;
                // Grab Cursor
                if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
                  swiper.setGrabCursor(true);
                }
                swiper.emit('sliderFirstMove', e);
              }
              swiper.emit('sliderMove', e);
              data.isMoved = true;
              var diff = swiper.isHorizontal() ? diffX : diffY;
              touches.diff = diff;
              diff *= params.touchRatio;
              if (rtl) {
                diff = -diff;
              }
              swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
              data.currentTranslate = diff + data.startTranslate;
              var disableParentSwiper = true;
              var resistanceRatio = params.resistanceRatio;
              if (params.touchReleaseOnEdges) {
                resistanceRatio = 0;
              }
              if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {
                disableParentSwiper = false;
                if (params.resistance) {
                  data.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio);
                }
              } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
                disableParentSwiper = false;
                if (params.resistance) {
                  data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio);
                }
              }
              if (disableParentSwiper) {
                e.preventedByNestedSwiper = true;
              }

              // Directions locks
              if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
                data.currentTranslate = data.startTranslate;
              }
              if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
                data.currentTranslate = data.startTranslate;
              }

              // Threshold
              if (params.threshold > 0) {
                if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
                  if (!data.allowThresholdMove) {
                    data.allowThresholdMove = true;
                    touches.startX = touches.currentX;
                    touches.startY = touches.currentY;
                    data.currentTranslate = data.startTranslate;
                    touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
                    return;
                  }
                } else {
                  data.currentTranslate = data.startTranslate;
                  return;
                }
              }
              if (!params.followFinger) {
                return;
              }

              // Update active index in free mode
              if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
                swiper.updateActiveIndex();
                swiper.updateSlidesClasses();
              }
              if (params.freeMode) {
                // Velocity
                if (data.velocities.length === 0) {
                  data.velocities.push({
                    position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
                    time: data.touchStartTime
                  });
                }
                data.velocities.push({
                  position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
                  time: Utils.now()
                });
              }
              // Update progress
              swiper.updateProgress(data.currentTranslate);
              // Update translate
              swiper.setTranslate(data.currentTranslate);
            }
            function onTouchEnd(event) {
              var swiper = this;
              var data = swiper.touchEventsData;
              var params = swiper.params;
              var touches = swiper.touches;
              var rtl = swiper.rtlTranslate;
              var $wrapperEl = swiper.$wrapperEl;
              var slidesGrid = swiper.slidesGrid;
              var snapGrid = swiper.snapGrid;
              var e = event;
              if (e.originalEvent) {
                e = e.originalEvent;
              }
              if (data.allowTouchCallbacks) {
                swiper.emit('touchEnd', e);
              }
              data.allowTouchCallbacks = false;
              if (!data.isTouched) {
                if (data.isMoved && params.grabCursor) {
                  swiper.setGrabCursor(false);
                }
                data.isMoved = false;
                data.startMoving = false;
                return;
              }
              // Return Grab Cursor
              if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
                swiper.setGrabCursor(false);
              }

              // Time diff
              var touchEndTime = Utils.now();
              var timeDiff = touchEndTime - data.touchStartTime;

              // Tap, doubleTap, Click
              if (swiper.allowClick) {
                swiper.updateClickedSlide(e);
                swiper.emit('tap', e);
                if (timeDiff < 300 && touchEndTime - data.lastClickTime > 300) {
                  if (data.clickTimeout) {
                    clearTimeout(data.clickTimeout);
                  }
                  data.clickTimeout = Utils.nextTick(function () {
                    if (!swiper || swiper.destroyed) {
                      return;
                    }
                    swiper.emit('click', e);
                  }, 300);
                }
                if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {
                  if (data.clickTimeout) {
                    clearTimeout(data.clickTimeout);
                  }
                  swiper.emit('doubleTap', e);
                }
              }
              data.lastClickTime = Utils.now();
              Utils.nextTick(function () {
                if (!swiper.destroyed) {
                  swiper.allowClick = true;
                }
              });
              if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
                data.isTouched = false;
                data.isMoved = false;
                data.startMoving = false;
                return;
              }
              data.isTouched = false;
              data.isMoved = false;
              data.startMoving = false;
              var currentPos;
              if (params.followFinger) {
                currentPos = rtl ? swiper.translate : -swiper.translate;
              } else {
                currentPos = -data.currentTranslate;
              }
              if (params.freeMode) {
                if (currentPos < -swiper.minTranslate()) {
                  swiper.slideTo(swiper.activeIndex);
                  return;
                }
                if (currentPos > -swiper.maxTranslate()) {
                  if (swiper.slides.length < snapGrid.length) {
                    swiper.slideTo(snapGrid.length - 1);
                  } else {
                    swiper.slideTo(swiper.slides.length - 1);
                  }
                  return;
                }
                if (params.freeModeMomentum) {
                  if (data.velocities.length > 1) {
                    var lastMoveEvent = data.velocities.pop();
                    var velocityEvent = data.velocities.pop();
                    var distance = lastMoveEvent.position - velocityEvent.position;
                    var time = lastMoveEvent.time - velocityEvent.time;
                    swiper.velocity = distance / time;
                    swiper.velocity /= 2;
                    if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
                      swiper.velocity = 0;
                    }
                    // this implies that the user stopped moving a finger then released.
                    // There would be no events with distance zero, so the last event is stale.
                    if (time > 150 || Utils.now() - lastMoveEvent.time > 300) {
                      swiper.velocity = 0;
                    }
                  } else {
                    swiper.velocity = 0;
                  }
                  swiper.velocity *= params.freeModeMomentumVelocityRatio;
                  data.velocities.length = 0;
                  var momentumDuration = 1000 * params.freeModeMomentumRatio;
                  var momentumDistance = swiper.velocity * momentumDuration;
                  var newPosition = swiper.translate + momentumDistance;
                  if (rtl) {
                    newPosition = -newPosition;
                  }
                  var doBounce = false;
                  var afterBouncePosition;
                  var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
                  var needsLoopFix;
                  if (newPosition < swiper.maxTranslate()) {
                    if (params.freeModeMomentumBounce) {
                      if (newPosition + swiper.maxTranslate() < -bounceAmount) {
                        newPosition = swiper.maxTranslate() - bounceAmount;
                      }
                      afterBouncePosition = swiper.maxTranslate();
                      doBounce = true;
                      data.allowMomentumBounce = true;
                    } else {
                      newPosition = swiper.maxTranslate();
                    }
                    if (params.loop && params.centeredSlides) {
                      needsLoopFix = true;
                    }
                  } else if (newPosition > swiper.minTranslate()) {
                    if (params.freeModeMomentumBounce) {
                      if (newPosition - swiper.minTranslate() > bounceAmount) {
                        newPosition = swiper.minTranslate() + bounceAmount;
                      }
                      afterBouncePosition = swiper.minTranslate();
                      doBounce = true;
                      data.allowMomentumBounce = true;
                    } else {
                      newPosition = swiper.minTranslate();
                    }
                    if (params.loop && params.centeredSlides) {
                      needsLoopFix = true;
                    }
                  } else if (params.freeModeSticky) {
                    var nextSlide;
                    for (var j = 0; j < snapGrid.length; j += 1) {
                      if (snapGrid[j] > -newPosition) {
                        nextSlide = j;
                        break;
                      }
                    }
                    if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
                      newPosition = snapGrid[nextSlide];
                    } else {
                      newPosition = snapGrid[nextSlide - 1];
                    }
                    newPosition = -newPosition;
                  }
                  if (needsLoopFix) {
                    swiper.once('transitionEnd', function () {
                      swiper.loopFix();
                    });
                  }
                  // Fix duration
                  if (swiper.velocity !== 0) {
                    if (rtl) {
                      momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
                    } else {
                      momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
                    }
                  } else if (params.freeModeSticky) {
                    swiper.slideToClosest();
                    return;
                  }
                  if (params.freeModeMomentumBounce && doBounce) {
                    swiper.updateProgress(afterBouncePosition);
                    swiper.setTransition(momentumDuration);
                    swiper.setTranslate(newPosition);
                    swiper.transitionStart(true, swiper.swipeDirection);
                    swiper.animating = true;
                    $wrapperEl.transitionEnd(function () {
                      if (!swiper || swiper.destroyed || !data.allowMomentumBounce) {
                        return;
                      }
                      swiper.emit('momentumBounce');
                      swiper.setTransition(params.speed);
                      swiper.setTranslate(afterBouncePosition);
                      $wrapperEl.transitionEnd(function () {
                        if (!swiper || swiper.destroyed) {
                          return;
                        }
                        swiper.transitionEnd();
                      });
                    });
                  } else if (swiper.velocity) {
                    swiper.updateProgress(newPosition);
                    swiper.setTransition(momentumDuration);
                    swiper.setTranslate(newPosition);
                    swiper.transitionStart(true, swiper.swipeDirection);
                    if (!swiper.animating) {
                      swiper.animating = true;
                      $wrapperEl.transitionEnd(function () {
                        if (!swiper || swiper.destroyed) {
                          return;
                        }
                        swiper.transitionEnd();
                      });
                    }
                  } else {
                    swiper.updateProgress(newPosition);
                  }
                  swiper.updateActiveIndex();
                  swiper.updateSlidesClasses();
                } else if (params.freeModeSticky) {
                  swiper.slideToClosest();
                  return;
                }
                if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
                  swiper.updateProgress();
                  swiper.updateActiveIndex();
                  swiper.updateSlidesClasses();
                }
                return;
              }

              // Find current slide
              var stopIndex = 0;
              var groupSize = swiper.slidesSizesGrid[0];
              for (var i = 0; i < slidesGrid.length; i += params.slidesPerGroup) {
                if (typeof slidesGrid[i + params.slidesPerGroup] !== 'undefined') {
                  if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + params.slidesPerGroup]) {
                    stopIndex = i;
                    groupSize = slidesGrid[i + params.slidesPerGroup] - slidesGrid[i];
                  }
                } else if (currentPos >= slidesGrid[i]) {
                  stopIndex = i;
                  groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
                }
              }

              // Find current slide size
              var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
              if (timeDiff > params.longSwipesMs) {
                // Long touches
                if (!params.longSwipes) {
                  swiper.slideTo(swiper.activeIndex);
                  return;
                }
                if (swiper.swipeDirection === 'next') {
                  if (ratio >= params.longSwipesRatio) {
                    swiper.slideTo(stopIndex + params.slidesPerGroup);
                  } else {
                    swiper.slideTo(stopIndex);
                  }
                }
                if (swiper.swipeDirection === 'prev') {
                  if (ratio > 1 - params.longSwipesRatio) {
                    swiper.slideTo(stopIndex + params.slidesPerGroup);
                  } else {
                    swiper.slideTo(stopIndex);
                  }
                }
              } else {
                // Short swipes
                if (!params.shortSwipes) {
                  swiper.slideTo(swiper.activeIndex);
                  return;
                }
                if (swiper.swipeDirection === 'next') {
                  swiper.slideTo(stopIndex + params.slidesPerGroup);
                }
                if (swiper.swipeDirection === 'prev') {
                  swiper.slideTo(stopIndex);
                }
              }
            }
            function onResize() {
              var swiper = this;
              var params = swiper.params;
              var el = swiper.el;
              if (el && el.offsetWidth === 0) {
                return;
              }

              // Breakpoints
              if (params.breakpoints) {
                swiper.setBreakpoint();
              }

              // Save locks
              var allowSlideNext = swiper.allowSlideNext;
              var allowSlidePrev = swiper.allowSlidePrev;
              var snapGrid = swiper.snapGrid;

              // Disable locks on resize
              swiper.allowSlideNext = true;
              swiper.allowSlidePrev = true;
              swiper.updateSize();
              swiper.updateSlides();
              if (params.freeMode) {
                var newTranslate = Math.min(Math.max(swiper.translate, swiper.maxTranslate()), swiper.minTranslate());
                swiper.setTranslate(newTranslate);
                swiper.updateActiveIndex();
                swiper.updateSlidesClasses();
                if (params.autoHeight) {
                  swiper.updateAutoHeight();
                }
              } else {
                swiper.updateSlidesClasses();
                if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
                  swiper.slideTo(swiper.slides.length - 1, 0, false, true);
                } else {
                  swiper.slideTo(swiper.activeIndex, 0, false, true);
                }
              }
              if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
                swiper.autoplay.run();
              }
              // Return locks after resize
              swiper.allowSlidePrev = allowSlidePrev;
              swiper.allowSlideNext = allowSlideNext;
              if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
                swiper.checkOverflow();
              }
            }
            function onClick(e) {
              var swiper = this;
              if (!swiper.allowClick) {
                if (swiper.params.preventClicks) {
                  e.preventDefault();
                }
                if (swiper.params.preventClicksPropagation && swiper.animating) {
                  e.stopPropagation();
                  e.stopImmediatePropagation();
                }
              }
            }
            function attachEvents() {
              var swiper = this;
              var params = swiper.params;
              var touchEvents = swiper.touchEvents;
              var el = swiper.el;
              var wrapperEl = swiper.wrapperEl;
              {
                swiper.onTouchStart = onTouchStart.bind(swiper);
                swiper.onTouchMove = onTouchMove.bind(swiper);
                swiper.onTouchEnd = onTouchEnd.bind(swiper);
              }
              swiper.onClick = onClick.bind(swiper);
              var target = params.touchEventsTarget === 'container' ? el : wrapperEl;
              var capture = !!params.nested;

              // Touch Events
              {
                if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {
                  target.addEventListener(touchEvents.start, swiper.onTouchStart, false);
                  doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
                  doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
                } else {
                  if (Support.touch) {
                    var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? {
                      passive: true,
                      capture: false
                    } : false;
                    target.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
                    target.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? {
                      passive: false,
                      capture: capture
                    } : capture);
                    target.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
                  }
                  if (params.simulateTouch && !Device.ios && !Device.android || params.simulateTouch && !Support.touch && Device.ios) {
                    target.addEventListener('mousedown', swiper.onTouchStart, false);
                    doc.addEventListener('mousemove', swiper.onTouchMove, capture);
                    doc.addEventListener('mouseup', swiper.onTouchEnd, false);
                  }
                }
                // Prevent Links Clicks
                if (params.preventClicks || params.preventClicksPropagation) {
                  target.addEventListener('click', swiper.onClick, true);
                }
              }

              // Resize handler
              swiper.on(Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);
            }
            function detachEvents() {
              var swiper = this;
              var params = swiper.params;
              var touchEvents = swiper.touchEvents;
              var el = swiper.el;
              var wrapperEl = swiper.wrapperEl;
              var target = params.touchEventsTarget === 'container' ? el : wrapperEl;
              var capture = !!params.nested;

              // Touch Events
              {
                if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {
                  target.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
                  doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
                  doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
                } else {
                  if (Support.touch) {
                    var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? {
                      passive: true,
                      capture: false
                    } : false;
                    target.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
                    target.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
                    target.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
                  }
                  if (params.simulateTouch && !Device.ios && !Device.android || params.simulateTouch && !Support.touch && Device.ios) {
                    target.removeEventListener('mousedown', swiper.onTouchStart, false);
                    doc.removeEventListener('mousemove', swiper.onTouchMove, capture);
                    doc.removeEventListener('mouseup', swiper.onTouchEnd, false);
                  }
                }
                // Prevent Links Clicks
                if (params.preventClicks || params.preventClicksPropagation) {
                  target.removeEventListener('click', swiper.onClick, true);
                }
              }

              // Resize handler
              swiper.off(Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize);
            }
            var events = {
              attachEvents: attachEvents,
              detachEvents: detachEvents
            };
            function setBreakpoint() {
              var swiper = this;
              var activeIndex = swiper.activeIndex;
              var initialized = swiper.initialized;
              var loopedSlides = swiper.loopedSlides;
              if (loopedSlides === void 0) loopedSlides = 0;
              var params = swiper.params;
              var breakpoints = params.breakpoints;
              if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) {
                return;
              }

              // Set breakpoint for window width and update parameters
              var breakpoint = swiper.getBreakpoint(breakpoints);
              if (breakpoint && swiper.currentBreakpoint !== breakpoint) {
                var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
                if (breakpointOnlyParams) {
                  ['slidesPerView', 'spaceBetween', 'slidesPerGroup'].forEach(function (param) {
                    var paramValue = breakpointOnlyParams[param];
                    if (typeof paramValue === 'undefined') {
                      return;
                    }
                    if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {
                      breakpointOnlyParams[param] = 'auto';
                    } else if (param === 'slidesPerView') {
                      breakpointOnlyParams[param] = parseFloat(paramValue);
                    } else {
                      breakpointOnlyParams[param] = parseInt(paramValue, 10);
                    }
                  });
                }
                var breakpointParams = breakpointOnlyParams || swiper.originalParams;
                var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
                var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
                if (directionChanged && initialized) {
                  swiper.changeDirection();
                }
                Utils.extend(swiper.params, breakpointParams);
                Utils.extend(swiper, {
                  allowTouchMove: swiper.params.allowTouchMove,
                  allowSlideNext: swiper.params.allowSlideNext,
                  allowSlidePrev: swiper.params.allowSlidePrev
                });
                swiper.currentBreakpoint = breakpoint;
                if (needsReLoop && initialized) {
                  swiper.loopDestroy();
                  swiper.loopCreate();
                  swiper.updateSlides();
                  swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);
                }
                swiper.emit('breakpoint', breakpointParams);
              }
            }
            function getBreakpoint(breakpoints) {
              var swiper = this;
              // Get breakpoint for window width
              if (!breakpoints) {
                return undefined;
              }
              var breakpoint = false;
              var points = [];
              Object.keys(breakpoints).forEach(function (point) {
                points.push(point);
              });
              points.sort(function (a, b) {
                return parseInt(a, 10) - parseInt(b, 10);
              });
              for (var i = 0; i < points.length; i += 1) {
                var point = points[i];
                if (swiper.params.breakpointsInverse) {
                  if (point <= win.innerWidth) {
                    breakpoint = point;
                  }
                } else if (point >= win.innerWidth && !breakpoint) {
                  breakpoint = point;
                }
              }
              return breakpoint || 'max';
            }
            var breakpoints = {
              setBreakpoint: setBreakpoint,
              getBreakpoint: getBreakpoint
            };
            function addClasses() {
              var swiper = this;
              var classNames = swiper.classNames;
              var params = swiper.params;
              var rtl = swiper.rtl;
              var $el = swiper.$el;
              var suffixes = [];
              suffixes.push('initialized');
              suffixes.push(params.direction);
              if (params.freeMode) {
                suffixes.push('free-mode');
              }
              if (!Support.flexbox) {
                suffixes.push('no-flexbox');
              }
              if (params.autoHeight) {
                suffixes.push('autoheight');
              }
              if (rtl) {
                suffixes.push('rtl');
              }
              if (params.slidesPerColumn > 1) {
                suffixes.push('multirow');
              }
              if (Device.android) {
                suffixes.push('android');
              }
              if (Device.ios) {
                suffixes.push('ios');
              }
              // WP8 Touch Events Fix
              if ((Browser.isIE || Browser.isEdge) && (Support.pointerEvents || Support.prefixedPointerEvents)) {
                suffixes.push("wp8-" + params.direction);
              }
              suffixes.forEach(function (suffix) {
                classNames.push(params.containerModifierClass + suffix);
              });
              $el.addClass(classNames.join(' '));
            }
            function removeClasses() {
              var swiper = this;
              var $el = swiper.$el;
              var classNames = swiper.classNames;
              $el.removeClass(classNames.join(' '));
            }
            var classes = {
              addClasses: addClasses,
              removeClasses: removeClasses
            };
            function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {
              var image;
              function onReady() {
                if (callback) {
                  callback();
                }
              }
              if (!imageEl.complete || !checkForComplete) {
                if (src) {
                  image = new win.Image();
                  image.onload = onReady;
                  image.onerror = onReady;
                  if (sizes) {
                    image.sizes = sizes;
                  }
                  if (srcset) {
                    image.srcset = srcset;
                  }
                  if (src) {
                    image.src = src;
                  }
                } else {
                  onReady();
                }
              } else {
                // image already loaded...
                onReady();
              }
            }
            function preloadImages() {
              var swiper = this;
              swiper.imagesToLoad = swiper.$el.find('img');
              function onReady() {
                if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) {
                  return;
                }
                if (swiper.imagesLoaded !== undefined) {
                  swiper.imagesLoaded += 1;
                }
                if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
                  if (swiper.params.updateOnImagesReady) {
                    swiper.update();
                  }
                  swiper.emit('imagesReady');
                }
              }
              for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {
                var imageEl = swiper.imagesToLoad[i];
                swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);
              }
            }
            var images = {
              loadImage: loadImage,
              preloadImages: preloadImages
            };
            function checkOverflow() {
              var swiper = this;
              var wasLocked = swiper.isLocked;
              swiper.isLocked = swiper.snapGrid.length === 1;
              swiper.allowSlideNext = !swiper.isLocked;
              swiper.allowSlidePrev = !swiper.isLocked;

              // events
              if (wasLocked !== swiper.isLocked) {
                swiper.emit(swiper.isLocked ? 'lock' : 'unlock');
              }
              if (wasLocked && wasLocked !== swiper.isLocked) {
                swiper.isEnd = false;
                swiper.navigation.update();
              }
            }
            var checkOverflow$1 = {
              checkOverflow: checkOverflow
            };
            var defaults = {
              init: true,
              direction: 'horizontal',
              touchEventsTarget: 'container',
              initialSlide: 0,
              speed: 300,
              //
              preventInteractionOnTransition: false,
              // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
              edgeSwipeDetection: false,
              edgeSwipeThreshold: 20,
              // Free mode
              freeMode: false,
              freeModeMomentum: true,
              freeModeMomentumRatio: 1,
              freeModeMomentumBounce: true,
              freeModeMomentumBounceRatio: 1,
              freeModeMomentumVelocityRatio: 1,
              freeModeSticky: false,
              freeModeMinimumVelocity: 0.02,
              // Autoheight
              autoHeight: false,
              // Set wrapper width
              setWrapperSize: false,
              // Virtual Translate
              virtualTranslate: false,
              // Effects
              effect: 'slide',
              // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'

              // Breakpoints
              breakpoints: undefined,
              breakpointsInverse: false,
              // Slides grid
              spaceBetween: 0,
              slidesPerView: 1,
              slidesPerColumn: 1,
              slidesPerColumnFill: 'column',
              slidesPerGroup: 1,
              centeredSlides: false,
              slidesOffsetBefore: 0,
              // in px
              slidesOffsetAfter: 0,
              // in px
              normalizeSlideIndex: true,
              centerInsufficientSlides: false,
              // Disable swiper and hide navigation when container not overflow
              watchOverflow: false,
              // Round length
              roundLengths: false,
              // Touches
              touchRatio: 1,
              touchAngle: 45,
              simulateTouch: true,
              shortSwipes: true,
              longSwipes: true,
              longSwipesRatio: 0.5,
              longSwipesMs: 300,
              followFinger: true,
              allowTouchMove: true,
              threshold: 0,
              touchMoveStopPropagation: true,
              touchStartPreventDefault: true,
              touchStartForcePreventDefault: false,
              touchReleaseOnEdges: false,
              // Unique Navigation Elements
              uniqueNavElements: true,
              // Resistance
              resistance: true,
              resistanceRatio: 0.85,
              // Progress
              watchSlidesProgress: false,
              watchSlidesVisibility: false,
              // Cursor
              grabCursor: false,
              // Clicks
              preventClicks: true,
              preventClicksPropagation: true,
              slideToClickedSlide: false,
              // Images
              preloadImages: true,
              updateOnImagesReady: true,
              // loop
              loop: false,
              loopAdditionalSlides: 0,
              loopedSlides: null,
              loopFillGroupWithBlank: false,
              // Swiping/no swiping
              allowSlidePrev: true,
              allowSlideNext: true,
              swipeHandler: null,
              // '.swipe-handler',
              noSwiping: true,
              noSwipingClass: 'swiper-no-swiping',
              noSwipingSelector: null,
              // Passive Listeners
              passiveListeners: true,
              // NS
              containerModifierClass: 'swiper-container-',
              // NEW
              slideClass: 'swiper-slide',
              slideBlankClass: 'swiper-slide-invisible-blank',
              slideActiveClass: 'swiper-slide-active',
              slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
              slideVisibleClass: 'swiper-slide-visible',
              slideDuplicateClass: 'swiper-slide-duplicate',
              slideNextClass: 'swiper-slide-next',
              slideDuplicateNextClass: 'swiper-slide-duplicate-next',
              slidePrevClass: 'swiper-slide-prev',
              slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
              wrapperClass: 'swiper-wrapper',
              // Callbacks
              runCallbacksOnInit: true
            };

            /* eslint no-param-reassign: "off" */

            var prototypes = {
              update: update,
              translate: translate,
              transition: transition$1,
              slide: slide,
              loop: loop,
              grabCursor: grabCursor,
              manipulation: manipulation,
              events: events,
              breakpoints: breakpoints,
              checkOverflow: checkOverflow$1,
              classes: classes,
              images: images
            };
            var extendedDefaults = {};
            var Swiper = /*@__PURE__*/function (SwiperClass) {
              function Swiper() {
                var assign;
                var args = [],
                  len = arguments.length;
                while (len--) args[len] = arguments[len];
                var el;
                var params;
                if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {
                  params = args[0];
                } else {
                  assign = args, el = assign[0], params = assign[1];
                }
                if (!params) {
                  params = {};
                }
                params = Utils.extend({}, params);
                if (el && !params.el) {
                  params.el = el;
                }
                SwiperClass.call(this, params);
                Object.keys(prototypes).forEach(function (prototypeGroup) {
                  Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {
                    if (!Swiper.prototype[protoMethod]) {
                      Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
                    }
                  });
                });

                // Swiper Instance
                var swiper = this;
                if (typeof swiper.modules === 'undefined') {
                  swiper.modules = {};
                }
                Object.keys(swiper.modules).forEach(function (moduleName) {
                  var module = swiper.modules[moduleName];
                  if (module.params) {
                    var moduleParamName = Object.keys(module.params)[0];
                    var moduleParams = module.params[moduleParamName];
                    if (_typeof(moduleParams) !== 'object' || moduleParams === null) {
                      return;
                    }
                    if (!(moduleParamName in params && 'enabled' in moduleParams)) {
                      return;
                    }
                    if (params[moduleParamName] === true) {
                      params[moduleParamName] = {
                        enabled: true
                      };
                    }
                    if (_typeof(params[moduleParamName]) === 'object' && !('enabled' in params[moduleParamName])) {
                      params[moduleParamName].enabled = true;
                    }
                    if (!params[moduleParamName]) {
                      params[moduleParamName] = {
                        enabled: false
                      };
                    }
                  }
                });

                // Extend defaults with modules params
                var swiperParams = Utils.extend({}, defaults);
                swiper.useModulesParams(swiperParams);

                // Extend defaults with passed params
                swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);
                swiper.originalParams = Utils.extend({}, swiper.params);
                swiper.passedParams = Utils.extend({}, params);

                // Save Dom lib
                swiper.$ = $;

                // Find el
                var $el = $(swiper.params.el);
                el = $el[0];
                if (!el) {
                  return undefined;
                }
                if ($el.length > 1) {
                  var swipers = [];
                  $el.each(function (index, containerEl) {
                    var newParams = Utils.extend({}, params, {
                      el: containerEl
                    });
                    swipers.push(new Swiper(newParams));
                  });
                  return swipers;
                }
                el.swiper = swiper;
                $el.data('swiper', swiper);

                // Find Wrapper
                var $wrapperEl = $el.children("." + swiper.params.wrapperClass);

                // Extend Swiper
                Utils.extend(swiper, {
                  $el: $el,
                  el: el,
                  $wrapperEl: $wrapperEl,
                  wrapperEl: $wrapperEl[0],
                  // Classes
                  classNames: [],
                  // Slides
                  slides: $(),
                  slidesGrid: [],
                  snapGrid: [],
                  slidesSizesGrid: [],
                  // isDirection
                  isHorizontal: function isHorizontal() {
                    return swiper.params.direction === 'horizontal';
                  },
                  isVertical: function isVertical() {
                    return swiper.params.direction === 'vertical';
                  },
                  // RTL
                  rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',
                  rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
                  wrongRTL: $wrapperEl.css('display') === '-webkit-box',
                  // Indexes
                  activeIndex: 0,
                  realIndex: 0,
                  //
                  isBeginning: true,
                  isEnd: false,
                  // Props
                  translate: 0,
                  previousTranslate: 0,
                  progress: 0,
                  velocity: 0,
                  animating: false,
                  // Locks
                  allowSlideNext: swiper.params.allowSlideNext,
                  allowSlidePrev: swiper.params.allowSlidePrev,
                  // Touch Events
                  touchEvents: function touchEvents() {
                    var touch = ['touchstart', 'touchmove', 'touchend'];
                    var desktop = ['mousedown', 'mousemove', 'mouseup'];
                    if (Support.pointerEvents) {
                      desktop = ['pointerdown', 'pointermove', 'pointerup'];
                    } else if (Support.prefixedPointerEvents) {
                      desktop = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];
                    }
                    swiper.touchEventsTouch = {
                      start: touch[0],
                      move: touch[1],
                      end: touch[2]
                    };
                    swiper.touchEventsDesktop = {
                      start: desktop[0],
                      move: desktop[1],
                      end: desktop[2]
                    };
                    return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;
                  }(),
                  touchEventsData: {
                    isTouched: undefined,
                    isMoved: undefined,
                    allowTouchCallbacks: undefined,
                    touchStartTime: undefined,
                    isScrolling: undefined,
                    currentTranslate: undefined,
                    startTranslate: undefined,
                    allowThresholdMove: undefined,
                    // Form elements to match
                    formElements: 'input, select, option, textarea, button, video',
                    // Last click time
                    lastClickTime: Utils.now(),
                    clickTimeout: undefined,
                    // Velocities
                    velocities: [],
                    allowMomentumBounce: undefined,
                    isTouchEvent: undefined,
                    startMoving: undefined
                  },
                  // Clicks
                  allowClick: true,
                  // Touches
                  allowTouchMove: swiper.params.allowTouchMove,
                  touches: {
                    startX: 0,
                    startY: 0,
                    currentX: 0,
                    currentY: 0,
                    diff: 0
                  },
                  // Images
                  imagesToLoad: [],
                  imagesLoaded: 0
                });

                // Install Modules
                swiper.useModules();

                // Init
                if (swiper.params.init) {
                  swiper.init();
                }

                // Return app instance
                return swiper;
              }
              if (SwiperClass) Swiper.__proto__ = SwiperClass;
              Swiper.prototype = Object.create(SwiperClass && SwiperClass.prototype);
              Swiper.prototype.constructor = Swiper;
              var staticAccessors = {
                extendedDefaults: {
                  configurable: true
                },
                defaults: {
                  configurable: true
                },
                Class: {
                  configurable: true
                },
                $: {
                  configurable: true
                }
              };
              Swiper.prototype.slidesPerViewDynamic = function slidesPerViewDynamic() {
                var swiper = this;
                var params = swiper.params;
                var slides = swiper.slides;
                var slidesGrid = swiper.slidesGrid;
                var swiperSize = swiper.size;
                var activeIndex = swiper.activeIndex;
                var spv = 1;
                if (params.centeredSlides) {
                  var slideSize = slides[activeIndex].swiperSlideSize;
                  var breakLoop;
                  for (var i = activeIndex + 1; i < slides.length; i += 1) {
                    if (slides[i] && !breakLoop) {
                      slideSize += slides[i].swiperSlideSize;
                      spv += 1;
                      if (slideSize > swiperSize) {
                        breakLoop = true;
                      }
                    }
                  }
                  for (var i$1 = activeIndex - 1; i$1 >= 0; i$1 -= 1) {
                    if (slides[i$1] && !breakLoop) {
                      slideSize += slides[i$1].swiperSlideSize;
                      spv += 1;
                      if (slideSize > swiperSize) {
                        breakLoop = true;
                      }
                    }
                  }
                } else {
                  for (var i$2 = activeIndex + 1; i$2 < slides.length; i$2 += 1) {
                    if (slidesGrid[i$2] - slidesGrid[activeIndex] < swiperSize) {
                      spv += 1;
                    }
                  }
                }
                return spv;
              };
              Swiper.prototype.update = function update() {
                var swiper = this;
                if (!swiper || swiper.destroyed) {
                  return;
                }
                var snapGrid = swiper.snapGrid;
                var params = swiper.params;
                // Breakpoints
                if (params.breakpoints) {
                  swiper.setBreakpoint();
                }
                swiper.updateSize();
                swiper.updateSlides();
                swiper.updateProgress();
                swiper.updateSlidesClasses();
                function setTranslate() {
                  var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
                  var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
                  swiper.setTranslate(newTranslate);
                  swiper.updateActiveIndex();
                  swiper.updateSlidesClasses();
                }
                var translated;
                if (swiper.params.freeMode) {
                  setTranslate();
                  if (swiper.params.autoHeight) {
                    swiper.updateAutoHeight();
                  }
                } else {
                  if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
                    translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);
                  } else {
                    translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
                  }
                  if (!translated) {
                    setTranslate();
                  }
                }
                if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
                  swiper.checkOverflow();
                }
                swiper.emit('update');
              };
              Swiper.prototype.changeDirection = function changeDirection(newDirection, needUpdate) {
                if (needUpdate === void 0) needUpdate = true;
                var swiper = this;
                var currentDirection = swiper.params.direction;
                if (!newDirection) {
                  // eslint-disable-next-line
                  newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
                }
                if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {
                  return swiper;
                }
                swiper.$el.removeClass("" + swiper.params.containerModifierClass + currentDirection + " wp8-" + currentDirection).addClass("" + swiper.params.containerModifierClass + newDirection);
                if ((Browser.isIE || Browser.isEdge) && (Support.pointerEvents || Support.prefixedPointerEvents)) {
                  swiper.$el.addClass(swiper.params.containerModifierClass + "wp8-" + newDirection);
                }
                swiper.params.direction = newDirection;
                swiper.slides.each(function (slideIndex, slideEl) {
                  if (newDirection === 'vertical') {
                    slideEl.style.width = '';
                  } else {
                    slideEl.style.height = '';
                  }
                });
                swiper.emit('changeDirection');
                if (needUpdate) {
                  swiper.update();
                }
                return swiper;
              };
              Swiper.prototype.init = function init() {
                var swiper = this;
                if (swiper.initialized) {
                  return;
                }
                swiper.emit('beforeInit');

                // Set breakpoint
                if (swiper.params.breakpoints) {
                  swiper.setBreakpoint();
                }

                // Add Classes
                swiper.addClasses();

                // Create loop
                if (swiper.params.loop) {
                  swiper.loopCreate();
                }

                // Update size
                swiper.updateSize();

                // Update slides
                swiper.updateSlides();
                if (swiper.params.watchOverflow) {
                  swiper.checkOverflow();
                }

                // Set Grab Cursor
                if (swiper.params.grabCursor) {
                  swiper.setGrabCursor();
                }
                if (swiper.params.preloadImages) {
                  swiper.preloadImages();
                }

                // Slide To Initial Slide
                if (swiper.params.loop) {
                  swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);
                } else {
                  swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);
                }

                // Attach events
                swiper.attachEvents();

                // Init Flag
                swiper.initialized = true;

                // Emit
                swiper.emit('init');
              };
              Swiper.prototype.destroy = function destroy(deleteInstance, cleanStyles) {
                if (deleteInstance === void 0) deleteInstance = true;
                if (cleanStyles === void 0) cleanStyles = true;
                var swiper = this;
                var params = swiper.params;
                var $el = swiper.$el;
                var $wrapperEl = swiper.$wrapperEl;
                var slides = swiper.slides;
                if (typeof swiper.params === 'undefined' || swiper.destroyed) {
                  return null;
                }
                swiper.emit('beforeDestroy');

                // Init Flag
                swiper.initialized = false;

                // Detach events
                swiper.detachEvents();

                // Destroy loop
                if (params.loop) {
                  swiper.loopDestroy();
                }

                // Cleanup styles
                if (cleanStyles) {
                  swiper.removeClasses();
                  $el.removeAttr('style');
                  $wrapperEl.removeAttr('style');
                  if (slides && slides.length) {
                    slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index').removeAttr('data-swiper-column').removeAttr('data-swiper-row');
                  }
                }
                swiper.emit('destroy');

                // Detach emitter events
                Object.keys(swiper.eventsListeners).forEach(function (eventName) {
                  swiper.off(eventName);
                });
                if (deleteInstance !== false) {
                  swiper.$el[0].swiper = null;
                  swiper.$el.data('swiper', null);
                  Utils.deleteProps(swiper);
                }
                swiper.destroyed = true;
                return null;
              };
              Swiper.extendDefaults = function extendDefaults(newDefaults) {
                Utils.extend(extendedDefaults, newDefaults);
              };
              staticAccessors.extendedDefaults.get = function () {
                return extendedDefaults;
              };
              staticAccessors.defaults.get = function () {
                return defaults;
              };
              staticAccessors.Class.get = function () {
                return SwiperClass;
              };
              staticAccessors.$.get = function () {
                return $;
              };
              Object.defineProperties(Swiper, staticAccessors);
              return Swiper;
            }(SwiperClass);
            var Device$1 = {
              name: 'device',
              proto: {
                device: Device
              },
              static: {
                device: Device
              }
            };
            var Support$1 = {
              name: 'support',
              proto: {
                support: Support
              },
              static: {
                support: Support
              }
            };
            var Browser$1 = {
              name: 'browser',
              proto: {
                browser: Browser
              },
              static: {
                browser: Browser
              }
            };
            var Resize = {
              name: 'resize',
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  resize: {
                    resizeHandler: function resizeHandler() {
                      if (!swiper || swiper.destroyed || !swiper.initialized) {
                        return;
                      }
                      swiper.emit('beforeResize');
                      swiper.emit('resize');
                    },
                    orientationChangeHandler: function orientationChangeHandler() {
                      if (!swiper || swiper.destroyed || !swiper.initialized) {
                        return;
                      }
                      swiper.emit('orientationchange');
                    }
                  }
                });
              },
              on: {
                init: function init() {
                  var swiper = this;
                  // Emit resize
                  win.addEventListener('resize', swiper.resize.resizeHandler);

                  // Emit orientationchange
                  win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);
                },
                destroy: function destroy() {
                  var swiper = this;
                  win.removeEventListener('resize', swiper.resize.resizeHandler);
                  win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);
                }
              }
            };
            var Observer = {
              func: win.MutationObserver || win.WebkitMutationObserver,
              attach: function attach(target, options) {
                if (options === void 0) options = {};
                var swiper = this;
                var ObserverFunc = Observer.func;
                var observer = new ObserverFunc(function (mutations) {
                  // The observerUpdate event should only be triggered
                  // once despite the number of mutations.  Additional
                  // triggers are redundant and are very costly
                  if (mutations.length === 1) {
                    swiper.emit('observerUpdate', mutations[0]);
                    return;
                  }
                  var observerUpdate = function observerUpdate() {
                    swiper.emit('observerUpdate', mutations[0]);
                  };
                  if (win.requestAnimationFrame) {
                    win.requestAnimationFrame(observerUpdate);
                  } else {
                    win.setTimeout(observerUpdate, 0);
                  }
                });
                observer.observe(target, {
                  attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
                  childList: typeof options.childList === 'undefined' ? true : options.childList,
                  characterData: typeof options.characterData === 'undefined' ? true : options.characterData
                });
                swiper.observer.observers.push(observer);
              },
              init: function init() {
                var swiper = this;
                if (!Support.observer || !swiper.params.observer) {
                  return;
                }
                if (swiper.params.observeParents) {
                  var containerParents = swiper.$el.parents();
                  for (var i = 0; i < containerParents.length; i += 1) {
                    swiper.observer.attach(containerParents[i]);
                  }
                }
                // Observe container
                swiper.observer.attach(swiper.$el[0], {
                  childList: swiper.params.observeSlideChildren
                });

                // Observe wrapper
                swiper.observer.attach(swiper.$wrapperEl[0], {
                  attributes: false
                });
              },
              destroy: function destroy() {
                var swiper = this;
                swiper.observer.observers.forEach(function (observer) {
                  observer.disconnect();
                });
                swiper.observer.observers = [];
              }
            };
            var Observer$1 = {
              name: 'observer',
              params: {
                observer: false,
                observeParents: false,
                observeSlideChildren: false
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  observer: {
                    init: Observer.init.bind(swiper),
                    attach: Observer.attach.bind(swiper),
                    destroy: Observer.destroy.bind(swiper),
                    observers: []
                  }
                });
              },
              on: {
                init: function init() {
                  var swiper = this;
                  swiper.observer.init();
                },
                destroy: function destroy() {
                  var swiper = this;
                  swiper.observer.destroy();
                }
              }
            };
            var Virtual = {
              update: function update(force) {
                var swiper = this;
                var ref = swiper.params;
                var slidesPerView = ref.slidesPerView;
                var slidesPerGroup = ref.slidesPerGroup;
                var centeredSlides = ref.centeredSlides;
                var ref$1 = swiper.params.virtual;
                var addSlidesBefore = ref$1.addSlidesBefore;
                var addSlidesAfter = ref$1.addSlidesAfter;
                var ref$2 = swiper.virtual;
                var previousFrom = ref$2.from;
                var previousTo = ref$2.to;
                var slides = ref$2.slides;
                var previousSlidesGrid = ref$2.slidesGrid;
                var renderSlide = ref$2.renderSlide;
                var previousOffset = ref$2.offset;
                swiper.updateActiveIndex();
                var activeIndex = swiper.activeIndex || 0;
                var offsetProp;
                if (swiper.rtlTranslate) {
                  offsetProp = 'right';
                } else {
                  offsetProp = swiper.isHorizontal() ? 'left' : 'top';
                }
                var slidesAfter;
                var slidesBefore;
                if (centeredSlides) {
                  slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
                  slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
                } else {
                  slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;
                  slidesBefore = slidesPerGroup + addSlidesAfter;
                }
                var from = Math.max((activeIndex || 0) - slidesBefore, 0);
                var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);
                var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
                Utils.extend(swiper.virtual, {
                  from: from,
                  to: to,
                  offset: offset,
                  slidesGrid: swiper.slidesGrid
                });
                function onRendered() {
                  swiper.updateSlides();
                  swiper.updateProgress();
                  swiper.updateSlidesClasses();
                  if (swiper.lazy && swiper.params.lazy.enabled) {
                    swiper.lazy.load();
                  }
                }
                if (previousFrom === from && previousTo === to && !force) {
                  if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
                    swiper.slides.css(offsetProp, offset + "px");
                  }
                  swiper.updateProgress();
                  return;
                }
                if (swiper.params.virtual.renderExternal) {
                  swiper.params.virtual.renderExternal.call(swiper, {
                    offset: offset,
                    from: from,
                    to: to,
                    slides: function getSlides() {
                      var slidesToRender = [];
                      for (var i = from; i <= to; i += 1) {
                        slidesToRender.push(slides[i]);
                      }
                      return slidesToRender;
                    }()
                  });
                  onRendered();
                  return;
                }
                var prependIndexes = [];
                var appendIndexes = [];
                if (force) {
                  swiper.$wrapperEl.find("." + swiper.params.slideClass).remove();
                } else {
                  for (var i = previousFrom; i <= previousTo; i += 1) {
                    if (i < from || i > to) {
                      swiper.$wrapperEl.find("." + swiper.params.slideClass + "[data-swiper-slide-index=\"" + i + "\"]").remove();
                    }
                  }
                }
                for (var i$1 = 0; i$1 < slides.length; i$1 += 1) {
                  if (i$1 >= from && i$1 <= to) {
                    if (typeof previousTo === 'undefined' || force) {
                      appendIndexes.push(i$1);
                    } else {
                      if (i$1 > previousTo) {
                        appendIndexes.push(i$1);
                      }
                      if (i$1 < previousFrom) {
                        prependIndexes.push(i$1);
                      }
                    }
                  }
                }
                appendIndexes.forEach(function (index) {
                  swiper.$wrapperEl.append(renderSlide(slides[index], index));
                });
                prependIndexes.sort(function (a, b) {
                  return b - a;
                }).forEach(function (index) {
                  swiper.$wrapperEl.prepend(renderSlide(slides[index], index));
                });
                swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, offset + "px");
                onRendered();
              },
              renderSlide: function renderSlide(slide, index) {
                var swiper = this;
                var params = swiper.params.virtual;
                if (params.cache && swiper.virtual.cache[index]) {
                  return swiper.virtual.cache[index];
                }
                var $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $("<div class=\"" + swiper.params.slideClass + "\" data-swiper-slide-index=\"" + index + "\">" + slide + "</div>");
                if (!$slideEl.attr('data-swiper-slide-index')) {
                  $slideEl.attr('data-swiper-slide-index', index);
                }
                if (params.cache) {
                  swiper.virtual.cache[index] = $slideEl;
                }
                return $slideEl;
              },
              appendSlide: function appendSlide(slides) {
                var swiper = this;
                if (_typeof(slides) === 'object' && 'length' in slides) {
                  for (var i = 0; i < slides.length; i += 1) {
                    if (slides[i]) {
                      swiper.virtual.slides.push(slides[i]);
                    }
                  }
                } else {
                  swiper.virtual.slides.push(slides);
                }
                swiper.virtual.update(true);
              },
              prependSlide: function prependSlide(slides) {
                var swiper = this;
                var activeIndex = swiper.activeIndex;
                var newActiveIndex = activeIndex + 1;
                var numberOfNewSlides = 1;
                if (Array.isArray(slides)) {
                  for (var i = 0; i < slides.length; i += 1) {
                    if (slides[i]) {
                      swiper.virtual.slides.unshift(slides[i]);
                    }
                  }
                  newActiveIndex = activeIndex + slides.length;
                  numberOfNewSlides = slides.length;
                } else {
                  swiper.virtual.slides.unshift(slides);
                }
                if (swiper.params.virtual.cache) {
                  var cache = swiper.virtual.cache;
                  var newCache = {};
                  Object.keys(cache).forEach(function (cachedIndex) {
                    newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cache[cachedIndex];
                  });
                  swiper.virtual.cache = newCache;
                }
                swiper.virtual.update(true);
                swiper.slideTo(newActiveIndex, 0);
              },
              removeSlide: function removeSlide(slidesIndexes) {
                var swiper = this;
                if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) {
                  return;
                }
                var activeIndex = swiper.activeIndex;
                if (Array.isArray(slidesIndexes)) {
                  for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) {
                    swiper.virtual.slides.splice(slidesIndexes[i], 1);
                    if (swiper.params.virtual.cache) {
                      delete swiper.virtual.cache[slidesIndexes[i]];
                    }
                    if (slidesIndexes[i] < activeIndex) {
                      activeIndex -= 1;
                    }
                    activeIndex = Math.max(activeIndex, 0);
                  }
                } else {
                  swiper.virtual.slides.splice(slidesIndexes, 1);
                  if (swiper.params.virtual.cache) {
                    delete swiper.virtual.cache[slidesIndexes];
                  }
                  if (slidesIndexes < activeIndex) {
                    activeIndex -= 1;
                  }
                  activeIndex = Math.max(activeIndex, 0);
                }
                swiper.virtual.update(true);
                swiper.slideTo(activeIndex, 0);
              },
              removeAllSlides: function removeAllSlides() {
                var swiper = this;
                swiper.virtual.slides = [];
                if (swiper.params.virtual.cache) {
                  swiper.virtual.cache = {};
                }
                swiper.virtual.update(true);
                swiper.slideTo(0, 0);
              }
            };
            var Virtual$1 = {
              name: 'virtual',
              params: {
                virtual: {
                  enabled: false,
                  slides: [],
                  cache: true,
                  renderSlide: null,
                  renderExternal: null,
                  addSlidesBefore: 0,
                  addSlidesAfter: 0
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  virtual: {
                    update: Virtual.update.bind(swiper),
                    appendSlide: Virtual.appendSlide.bind(swiper),
                    prependSlide: Virtual.prependSlide.bind(swiper),
                    removeSlide: Virtual.removeSlide.bind(swiper),
                    removeAllSlides: Virtual.removeAllSlides.bind(swiper),
                    renderSlide: Virtual.renderSlide.bind(swiper),
                    slides: swiper.params.virtual.slides,
                    cache: {}
                  }
                });
              },
              on: {
                beforeInit: function beforeInit() {
                  var swiper = this;
                  if (!swiper.params.virtual.enabled) {
                    return;
                  }
                  swiper.classNames.push(swiper.params.containerModifierClass + "virtual");
                  var overwriteParams = {
                    watchSlidesProgress: true
                  };
                  Utils.extend(swiper.params, overwriteParams);
                  Utils.extend(swiper.originalParams, overwriteParams);
                  if (!swiper.params.initialSlide) {
                    swiper.virtual.update();
                  }
                },
                setTranslate: function setTranslate() {
                  var swiper = this;
                  if (!swiper.params.virtual.enabled) {
                    return;
                  }
                  swiper.virtual.update();
                }
              }
            };
            var Keyboard = {
              handle: function handle(event) {
                var swiper = this;
                var rtl = swiper.rtlTranslate;
                var e = event;
                if (e.originalEvent) {
                  e = e.originalEvent;
                } // jquery fix
                var kc = e.keyCode || e.charCode;
                // Directions locks
                if (!swiper.allowSlideNext && (swiper.isHorizontal() && kc === 39 || swiper.isVertical() && kc === 40 || kc === 34)) {
                  return false;
                }
                if (!swiper.allowSlidePrev && (swiper.isHorizontal() && kc === 37 || swiper.isVertical() && kc === 38 || kc === 33)) {
                  return false;
                }
                if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
                  return undefined;
                }
                if (doc.activeElement && doc.activeElement.nodeName && (doc.activeElement.nodeName.toLowerCase() === 'input' || doc.activeElement.nodeName.toLowerCase() === 'textarea')) {
                  return undefined;
                }
                if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {
                  var inView = false;
                  // Check that swiper should be inside of visible area of window
                  if (swiper.$el.parents("." + swiper.params.slideClass).length > 0 && swiper.$el.parents("." + swiper.params.slideActiveClass).length === 0) {
                    return undefined;
                  }
                  var windowWidth = win.innerWidth;
                  var windowHeight = win.innerHeight;
                  var swiperOffset = swiper.$el.offset();
                  if (rtl) {
                    swiperOffset.left -= swiper.$el[0].scrollLeft;
                  }
                  var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];
                  for (var i = 0; i < swiperCoord.length; i += 1) {
                    var point = swiperCoord[i];
                    if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {
                      inView = true;
                    }
                  }
                  if (!inView) {
                    return undefined;
                  }
                }
                if (swiper.isHorizontal()) {
                  if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {
                    if (e.preventDefault) {
                      e.preventDefault();
                    } else {
                      e.returnValue = false;
                    }
                  }
                  if ((kc === 34 || kc === 39) && !rtl || (kc === 33 || kc === 37) && rtl) {
                    swiper.slideNext();
                  }
                  if ((kc === 33 || kc === 37) && !rtl || (kc === 34 || kc === 39) && rtl) {
                    swiper.slidePrev();
                  }
                } else {
                  if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {
                    if (e.preventDefault) {
                      e.preventDefault();
                    } else {
                      e.returnValue = false;
                    }
                  }
                  if (kc === 34 || kc === 40) {
                    swiper.slideNext();
                  }
                  if (kc === 33 || kc === 38) {
                    swiper.slidePrev();
                  }
                }
                swiper.emit('keyPress', kc);
                return undefined;
              },
              enable: function enable() {
                var swiper = this;
                if (swiper.keyboard.enabled) {
                  return;
                }
                $(doc).on('keydown', swiper.keyboard.handle);
                swiper.keyboard.enabled = true;
              },
              disable: function disable() {
                var swiper = this;
                if (!swiper.keyboard.enabled) {
                  return;
                }
                $(doc).off('keydown', swiper.keyboard.handle);
                swiper.keyboard.enabled = false;
              }
            };
            var Keyboard$1 = {
              name: 'keyboard',
              params: {
                keyboard: {
                  enabled: false,
                  onlyInViewport: true
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  keyboard: {
                    enabled: false,
                    enable: Keyboard.enable.bind(swiper),
                    disable: Keyboard.disable.bind(swiper),
                    handle: Keyboard.handle.bind(swiper)
                  }
                });
              },
              on: {
                init: function init() {
                  var swiper = this;
                  if (swiper.params.keyboard.enabled) {
                    swiper.keyboard.enable();
                  }
                },
                destroy: function destroy() {
                  var swiper = this;
                  if (swiper.keyboard.enabled) {
                    swiper.keyboard.disable();
                  }
                }
              }
            };
            function isEventSupported() {
              var eventName = 'onwheel';
              var isSupported = (eventName in doc);
              if (!isSupported) {
                var element = doc.createElement('div');
                element.setAttribute(eventName, 'return;');
                isSupported = typeof element[eventName] === 'function';
              }
              if (!isSupported && doc.implementation && doc.implementation.hasFeature
              // always returns true in newer browsers as per the standard.
              // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
              && doc.implementation.hasFeature('', '') !== true) {
                // This is the only way to test support for the `wheel` event in IE9+.
                isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');
              }
              return isSupported;
            }
            var Mousewheel = {
              lastScrollTime: Utils.now(),
              event: function getEvent() {
                if (win.navigator.userAgent.indexOf('firefox') > -1) {
                  return 'DOMMouseScroll';
                }
                return isEventSupported() ? 'wheel' : 'mousewheel';
              }(),
              normalize: function normalize(e) {
                // Reasonable defaults
                var PIXEL_STEP = 10;
                var LINE_HEIGHT = 40;
                var PAGE_HEIGHT = 800;
                var sX = 0;
                var sY = 0; // spinX, spinY
                var pX = 0;
                var pY = 0; // pixelX, pixelY

                // Legacy
                if ('detail' in e) {
                  sY = e.detail;
                }
                if ('wheelDelta' in e) {
                  sY = -e.wheelDelta / 120;
                }
                if ('wheelDeltaY' in e) {
                  sY = -e.wheelDeltaY / 120;
                }
                if ('wheelDeltaX' in e) {
                  sX = -e.wheelDeltaX / 120;
                }

                // side scrolling on FF with DOMMouseScroll
                if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
                  sX = sY;
                  sY = 0;
                }
                pX = sX * PIXEL_STEP;
                pY = sY * PIXEL_STEP;
                if ('deltaY' in e) {
                  pY = e.deltaY;
                }
                if ('deltaX' in e) {
                  pX = e.deltaX;
                }
                if ((pX || pY) && e.deltaMode) {
                  if (e.deltaMode === 1) {
                    // delta in LINE units
                    pX *= LINE_HEIGHT;
                    pY *= LINE_HEIGHT;
                  } else {
                    // delta in PAGE units
                    pX *= PAGE_HEIGHT;
                    pY *= PAGE_HEIGHT;
                  }
                }

                // Fall-back if spin cannot be determined
                if (pX && !sX) {
                  sX = pX < 1 ? -1 : 1;
                }
                if (pY && !sY) {
                  sY = pY < 1 ? -1 : 1;
                }
                return {
                  spinX: sX,
                  spinY: sY,
                  pixelX: pX,
                  pixelY: pY
                };
              },
              handleMouseEnter: function handleMouseEnter() {
                var swiper = this;
                swiper.mouseEntered = true;
              },
              handleMouseLeave: function handleMouseLeave() {
                var swiper = this;
                swiper.mouseEntered = false;
              },
              handle: function handle(event) {
                var e = event;
                var swiper = this;
                var params = swiper.params.mousewheel;
                if (!swiper.mouseEntered && !params.releaseOnEdges) {
                  return true;
                }
                if (e.originalEvent) {
                  e = e.originalEvent;
                } // jquery fix
                var delta = 0;
                var rtlFactor = swiper.rtlTranslate ? -1 : 1;
                var data = Mousewheel.normalize(e);
                if (params.forceToAxis) {
                  if (swiper.isHorizontal()) {
                    if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) {
                      delta = data.pixelX * rtlFactor;
                    } else {
                      return true;
                    }
                  } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) {
                    delta = data.pixelY;
                  } else {
                    return true;
                  }
                } else {
                  delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
                }
                if (delta === 0) {
                  return true;
                }
                if (params.invert) {
                  delta = -delta;
                }
                if (!swiper.params.freeMode) {
                  if (Utils.now() - swiper.mousewheel.lastScrollTime > 60) {
                    if (delta < 0) {
                      if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
                        swiper.slideNext();
                        swiper.emit('scroll', e);
                      } else if (params.releaseOnEdges) {
                        return true;
                      }
                    } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
                      swiper.slidePrev();
                      swiper.emit('scroll', e);
                    } else if (params.releaseOnEdges) {
                      return true;
                    }
                  }
                  swiper.mousewheel.lastScrollTime = new win.Date().getTime();
                } else {
                  // Freemode or scrollContainer:
                  if (swiper.params.loop) {
                    swiper.loopFix();
                  }
                  var position = swiper.getTranslate() + delta * params.sensitivity;
                  var wasBeginning = swiper.isBeginning;
                  var wasEnd = swiper.isEnd;
                  if (position >= swiper.minTranslate()) {
                    position = swiper.minTranslate();
                  }
                  if (position <= swiper.maxTranslate()) {
                    position = swiper.maxTranslate();
                  }
                  swiper.setTransition(0);
                  swiper.setTranslate(position);
                  swiper.updateProgress();
                  swiper.updateActiveIndex();
                  swiper.updateSlidesClasses();
                  if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {
                    swiper.updateSlidesClasses();
                  }
                  if (swiper.params.freeModeSticky) {
                    clearTimeout(swiper.mousewheel.timeout);
                    swiper.mousewheel.timeout = Utils.nextTick(function () {
                      swiper.slideToClosest();
                    }, 300);
                  }
                  // Emit event
                  swiper.emit('scroll', e);

                  // Stop autoplay
                  if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) {
                    swiper.autoplay.stop();
                  }
                  // Return page scroll on edge positions
                  if (position === swiper.minTranslate() || position === swiper.maxTranslate()) {
                    return true;
                  }
                }
                if (e.preventDefault) {
                  e.preventDefault();
                } else {
                  e.returnValue = false;
                }
                return false;
              },
              enable: function enable() {
                var swiper = this;
                if (!Mousewheel.event) {
                  return false;
                }
                if (swiper.mousewheel.enabled) {
                  return false;
                }
                var target = swiper.$el;
                if (swiper.params.mousewheel.eventsTarged !== 'container') {
                  target = $(swiper.params.mousewheel.eventsTarged);
                }
                target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
                target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
                target.on(Mousewheel.event, swiper.mousewheel.handle);
                swiper.mousewheel.enabled = true;
                return true;
              },
              disable: function disable() {
                var swiper = this;
                if (!Mousewheel.event) {
                  return false;
                }
                if (!swiper.mousewheel.enabled) {
                  return false;
                }
                var target = swiper.$el;
                if (swiper.params.mousewheel.eventsTarged !== 'container') {
                  target = $(swiper.params.mousewheel.eventsTarged);
                }
                target.off(Mousewheel.event, swiper.mousewheel.handle);
                swiper.mousewheel.enabled = false;
                return true;
              }
            };
            var Mousewheel$1 = {
              name: 'mousewheel',
              params: {
                mousewheel: {
                  enabled: false,
                  releaseOnEdges: false,
                  invert: false,
                  forceToAxis: false,
                  sensitivity: 1,
                  eventsTarged: 'container'
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  mousewheel: {
                    enabled: false,
                    enable: Mousewheel.enable.bind(swiper),
                    disable: Mousewheel.disable.bind(swiper),
                    handle: Mousewheel.handle.bind(swiper),
                    handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),
                    handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),
                    lastScrollTime: Utils.now()
                  }
                });
              },
              on: {
                init: function init() {
                  var swiper = this;
                  if (swiper.params.mousewheel.enabled) {
                    swiper.mousewheel.enable();
                  }
                },
                destroy: function destroy() {
                  var swiper = this;
                  if (swiper.mousewheel.enabled) {
                    swiper.mousewheel.disable();
                  }
                }
              }
            };
            var Navigation = {
              update: function update() {
                // Update Navigation Buttons
                var swiper = this;
                var params = swiper.params.navigation;
                if (swiper.params.loop) {
                  return;
                }
                var ref = swiper.navigation;
                var $nextEl = ref.$nextEl;
                var $prevEl = ref.$prevEl;
                if ($prevEl && $prevEl.length > 0) {
                  if (swiper.isBeginning) {
                    $prevEl.addClass(params.disabledClass);
                  } else {
                    $prevEl.removeClass(params.disabledClass);
                  }
                  $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
                }
                if ($nextEl && $nextEl.length > 0) {
                  if (swiper.isEnd) {
                    $nextEl.addClass(params.disabledClass);
                  } else {
                    $nextEl.removeClass(params.disabledClass);
                  }
                  $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
                }
              },
              onPrevClick: function onPrevClick(e) {
                var swiper = this;
                e.preventDefault();
                if (swiper.isBeginning && !swiper.params.loop) {
                  return;
                }
                swiper.slidePrev();
              },
              onNextClick: function onNextClick(e) {
                var swiper = this;
                e.preventDefault();
                if (swiper.isEnd && !swiper.params.loop) {
                  return;
                }
                swiper.slideNext();
              },
              init: function init() {
                var swiper = this;
                var params = swiper.params.navigation;
                if (!(params.nextEl || params.prevEl)) {
                  return;
                }
                var $nextEl;
                var $prevEl;
                if (params.nextEl) {
                  $nextEl = $(params.nextEl);
                  if (swiper.params.uniqueNavElements && typeof params.nextEl === 'string' && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) {
                    $nextEl = swiper.$el.find(params.nextEl);
                  }
                }
                if (params.prevEl) {
                  $prevEl = $(params.prevEl);
                  if (swiper.params.uniqueNavElements && typeof params.prevEl === 'string' && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) {
                    $prevEl = swiper.$el.find(params.prevEl);
                  }
                }
                if ($nextEl && $nextEl.length > 0) {
                  $nextEl.on('click', swiper.navigation.onNextClick);
                }
                if ($prevEl && $prevEl.length > 0) {
                  $prevEl.on('click', swiper.navigation.onPrevClick);
                }
                Utils.extend(swiper.navigation, {
                  $nextEl: $nextEl,
                  nextEl: $nextEl && $nextEl[0],
                  $prevEl: $prevEl,
                  prevEl: $prevEl && $prevEl[0]
                });
              },
              destroy: function destroy() {
                var swiper = this;
                var ref = swiper.navigation;
                var $nextEl = ref.$nextEl;
                var $prevEl = ref.$prevEl;
                if ($nextEl && $nextEl.length) {
                  $nextEl.off('click', swiper.navigation.onNextClick);
                  $nextEl.removeClass(swiper.params.navigation.disabledClass);
                }
                if ($prevEl && $prevEl.length) {
                  $prevEl.off('click', swiper.navigation.onPrevClick);
                  $prevEl.removeClass(swiper.params.navigation.disabledClass);
                }
              }
            };
            var Navigation$1 = {
              name: 'navigation',
              params: {
                navigation: {
                  nextEl: null,
                  prevEl: null,
                  hideOnClick: false,
                  disabledClass: 'swiper-button-disabled',
                  hiddenClass: 'swiper-button-hidden',
                  lockClass: 'swiper-button-lock'
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  navigation: {
                    init: Navigation.init.bind(swiper),
                    update: Navigation.update.bind(swiper),
                    destroy: Navigation.destroy.bind(swiper),
                    onNextClick: Navigation.onNextClick.bind(swiper),
                    onPrevClick: Navigation.onPrevClick.bind(swiper)
                  }
                });
              },
              on: {
                init: function init() {
                  var swiper = this;
                  swiper.navigation.init();
                  swiper.navigation.update();
                },
                toEdge: function toEdge() {
                  var swiper = this;
                  swiper.navigation.update();
                },
                fromEdge: function fromEdge() {
                  var swiper = this;
                  swiper.navigation.update();
                },
                destroy: function destroy() {
                  var swiper = this;
                  swiper.navigation.destroy();
                },
                click: function click(e) {
                  var swiper = this;
                  var ref = swiper.navigation;
                  var $nextEl = ref.$nextEl;
                  var $prevEl = ref.$prevEl;
                  if (swiper.params.navigation.hideOnClick && !$(e.target).is($prevEl) && !$(e.target).is($nextEl)) {
                    var isHidden;
                    if ($nextEl) {
                      isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);
                    } else if ($prevEl) {
                      isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);
                    }
                    if (isHidden === true) {
                      swiper.emit('navigationShow', swiper);
                    } else {
                      swiper.emit('navigationHide', swiper);
                    }
                    if ($nextEl) {
                      $nextEl.toggleClass(swiper.params.navigation.hiddenClass);
                    }
                    if ($prevEl) {
                      $prevEl.toggleClass(swiper.params.navigation.hiddenClass);
                    }
                  }
                }
              }
            };
            var Pagination = {
              update: function update() {
                // Render || Update Pagination bullets/items
                var swiper = this;
                var rtl = swiper.rtl;
                var params = swiper.params.pagination;
                if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) {
                  return;
                }
                var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
                var $el = swiper.pagination.$el;
                // Current/Total
                var current;
                var total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
                if (swiper.params.loop) {
                  current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);
                  if (current > slidesLength - 1 - swiper.loopedSlides * 2) {
                    current -= slidesLength - swiper.loopedSlides * 2;
                  }
                  if (current > total - 1) {
                    current -= total;
                  }
                  if (current < 0 && swiper.params.paginationType !== 'bullets') {
                    current = total + current;
                  }
                } else if (typeof swiper.snapIndex !== 'undefined') {
                  current = swiper.snapIndex;
                } else {
                  current = swiper.activeIndex || 0;
                }
                // Types
                if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
                  var bullets = swiper.pagination.bullets;
                  var firstIndex;
                  var lastIndex;
                  var midIndex;
                  if (params.dynamicBullets) {
                    swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);
                    $el.css(swiper.isHorizontal() ? 'width' : 'height', swiper.pagination.bulletSize * (params.dynamicMainBullets + 4) + "px");
                    if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
                      swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex;
                      if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) {
                        swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
                      } else if (swiper.pagination.dynamicBulletIndex < 0) {
                        swiper.pagination.dynamicBulletIndex = 0;
                      }
                    }
                    firstIndex = current - swiper.pagination.dynamicBulletIndex;
                    lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
                    midIndex = (lastIndex + firstIndex) / 2;
                  }
                  bullets.removeClass(params.bulletActiveClass + " " + params.bulletActiveClass + "-next " + params.bulletActiveClass + "-next-next " + params.bulletActiveClass + "-prev " + params.bulletActiveClass + "-prev-prev " + params.bulletActiveClass + "-main");
                  if ($el.length > 1) {
                    bullets.each(function (index, bullet) {
                      var $bullet = $(bullet);
                      var bulletIndex = $bullet.index();
                      if (bulletIndex === current) {
                        $bullet.addClass(params.bulletActiveClass);
                      }
                      if (params.dynamicBullets) {
                        if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
                          $bullet.addClass(params.bulletActiveClass + "-main");
                        }
                        if (bulletIndex === firstIndex) {
                          $bullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev");
                        }
                        if (bulletIndex === lastIndex) {
                          $bullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next");
                        }
                      }
                    });
                  } else {
                    var $bullet = bullets.eq(current);
                    $bullet.addClass(params.bulletActiveClass);
                    if (params.dynamicBullets) {
                      var $firstDisplayedBullet = bullets.eq(firstIndex);
                      var $lastDisplayedBullet = bullets.eq(lastIndex);
                      for (var i = firstIndex; i <= lastIndex; i += 1) {
                        bullets.eq(i).addClass(params.bulletActiveClass + "-main");
                      }
                      $firstDisplayedBullet.prev().addClass(params.bulletActiveClass + "-prev").prev().addClass(params.bulletActiveClass + "-prev-prev");
                      $lastDisplayedBullet.next().addClass(params.bulletActiveClass + "-next").next().addClass(params.bulletActiveClass + "-next-next");
                    }
                  }
                  if (params.dynamicBullets) {
                    var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
                    var bulletsOffset = (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 - midIndex * swiper.pagination.bulletSize;
                    var offsetProp = rtl ? 'right' : 'left';
                    bullets.css(swiper.isHorizontal() ? offsetProp : 'top', bulletsOffset + "px");
                  }
                }
                if (params.type === 'fraction') {
                  $el.find("." + params.currentClass).text(params.formatFractionCurrent(current + 1));
                  $el.find("." + params.totalClass).text(params.formatFractionTotal(total));
                }
                if (params.type === 'progressbar') {
                  var progressbarDirection;
                  if (params.progressbarOpposite) {
                    progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
                  } else {
                    progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
                  }
                  var scale = (current + 1) / total;
                  var scaleX = 1;
                  var scaleY = 1;
                  if (progressbarDirection === 'horizontal') {
                    scaleX = scale;
                  } else {
                    scaleY = scale;
                  }
                  $el.find("." + params.progressbarFillClass).transform("translate3d(0,0,0) scaleX(" + scaleX + ") scaleY(" + scaleY + ")").transition(swiper.params.speed);
                }
                if (params.type === 'custom' && params.renderCustom) {
                  $el.html(params.renderCustom(swiper, current + 1, total));
                  swiper.emit('paginationRender', swiper, $el[0]);
                } else {
                  swiper.emit('paginationUpdate', swiper, $el[0]);
                }
                $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
              },
              render: function render() {
                // Render Container
                var swiper = this;
                var params = swiper.params.pagination;
                if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) {
                  return;
                }
                var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
                var $el = swiper.pagination.$el;
                var paginationHTML = '';
                if (params.type === 'bullets') {
                  var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
                  for (var i = 0; i < numberOfBullets; i += 1) {
                    if (params.renderBullet) {
                      paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
                    } else {
                      paginationHTML += "<" + params.bulletElement + " class=\"" + params.bulletClass + "\"></" + params.bulletElement + ">";
                    }
                  }
                  $el.html(paginationHTML);
                  swiper.pagination.bullets = $el.find("." + params.bulletClass);
                }
                if (params.type === 'fraction') {
                  if (params.renderFraction) {
                    paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
                  } else {
                    paginationHTML = "<span class=\"" + params.currentClass + "\"></span>" + ' / ' + "<span class=\"" + params.totalClass + "\"></span>";
                  }
                  $el.html(paginationHTML);
                }
                if (params.type === 'progressbar') {
                  if (params.renderProgressbar) {
                    paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
                  } else {
                    paginationHTML = "<span class=\"" + params.progressbarFillClass + "\"></span>";
                  }
                  $el.html(paginationHTML);
                }
                if (params.type !== 'custom') {
                  swiper.emit('paginationRender', swiper.pagination.$el[0]);
                }
              },
              init: function init() {
                var swiper = this;
                var params = swiper.params.pagination;
                if (!params.el) {
                  return;
                }
                var $el = $(params.el);
                if ($el.length === 0) {
                  return;
                }
                if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && swiper.$el.find(params.el).length === 1) {
                  $el = swiper.$el.find(params.el);
                }
                if (params.type === 'bullets' && params.clickable) {
                  $el.addClass(params.clickableClass);
                }
                $el.addClass(params.modifierClass + params.type);
                if (params.type === 'bullets' && params.dynamicBullets) {
                  $el.addClass("" + params.modifierClass + params.type + "-dynamic");
                  swiper.pagination.dynamicBulletIndex = 0;
                  if (params.dynamicMainBullets < 1) {
                    params.dynamicMainBullets = 1;
                  }
                }
                if (params.type === 'progressbar' && params.progressbarOpposite) {
                  $el.addClass(params.progressbarOppositeClass);
                }
                if (params.clickable) {
                  $el.on('click', "." + params.bulletClass, function onClick(e) {
                    e.preventDefault();
                    var index = $(this).index() * swiper.params.slidesPerGroup;
                    if (swiper.params.loop) {
                      index += swiper.loopedSlides;
                    }
                    swiper.slideTo(index);
                  });
                }
                Utils.extend(swiper.pagination, {
                  $el: $el,
                  el: $el[0]
                });
              },
              destroy: function destroy() {
                var swiper = this;
                var params = swiper.params.pagination;
                if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) {
                  return;
                }
                var $el = swiper.pagination.$el;
                $el.removeClass(params.hiddenClass);
                $el.removeClass(params.modifierClass + params.type);
                if (swiper.pagination.bullets) {
                  swiper.pagination.bullets.removeClass(params.bulletActiveClass);
                }
                if (params.clickable) {
                  $el.off('click', "." + params.bulletClass);
                }
              }
            };
            var Pagination$1 = {
              name: 'pagination',
              params: {
                pagination: {
                  el: null,
                  bulletElement: 'span',
                  clickable: false,
                  hideOnClick: false,
                  renderBullet: null,
                  renderProgressbar: null,
                  renderFraction: null,
                  renderCustom: null,
                  progressbarOpposite: false,
                  type: 'bullets',
                  // 'bullets' or 'progressbar' or 'fraction' or 'custom'
                  dynamicBullets: false,
                  dynamicMainBullets: 1,
                  formatFractionCurrent: function formatFractionCurrent(number) {
                    return number;
                  },
                  formatFractionTotal: function formatFractionTotal(number) {
                    return number;
                  },
                  bulletClass: 'swiper-pagination-bullet',
                  bulletActiveClass: 'swiper-pagination-bullet-active',
                  modifierClass: 'swiper-pagination-',
                  // NEW
                  currentClass: 'swiper-pagination-current',
                  totalClass: 'swiper-pagination-total',
                  hiddenClass: 'swiper-pagination-hidden',
                  progressbarFillClass: 'swiper-pagination-progressbar-fill',
                  progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
                  clickableClass: 'swiper-pagination-clickable',
                  // NEW
                  lockClass: 'swiper-pagination-lock'
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  pagination: {
                    init: Pagination.init.bind(swiper),
                    render: Pagination.render.bind(swiper),
                    update: Pagination.update.bind(swiper),
                    destroy: Pagination.destroy.bind(swiper),
                    dynamicBulletIndex: 0
                  }
                });
              },
              on: {
                init: function init() {
                  var swiper = this;
                  swiper.pagination.init();
                  swiper.pagination.render();
                  swiper.pagination.update();
                },
                activeIndexChange: function activeIndexChange() {
                  var swiper = this;
                  if (swiper.params.loop) {
                    swiper.pagination.update();
                  } else if (typeof swiper.snapIndex === 'undefined') {
                    swiper.pagination.update();
                  }
                },
                snapIndexChange: function snapIndexChange() {
                  var swiper = this;
                  if (!swiper.params.loop) {
                    swiper.pagination.update();
                  }
                },
                slidesLengthChange: function slidesLengthChange() {
                  var swiper = this;
                  if (swiper.params.loop) {
                    swiper.pagination.render();
                    swiper.pagination.update();
                  }
                },
                snapGridLengthChange: function snapGridLengthChange() {
                  var swiper = this;
                  if (!swiper.params.loop) {
                    swiper.pagination.render();
                    swiper.pagination.update();
                  }
                },
                destroy: function destroy() {
                  var swiper = this;
                  swiper.pagination.destroy();
                },
                click: function click(e) {
                  var swiper = this;
                  if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && swiper.pagination.$el.length > 0 && !$(e.target).hasClass(swiper.params.pagination.bulletClass)) {
                    var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);
                    if (isHidden === true) {
                      swiper.emit('paginationShow', swiper);
                    } else {
                      swiper.emit('paginationHide', swiper);
                    }
                    swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);
                  }
                }
              }
            };
            var Scrollbar = {
              setTranslate: function setTranslate() {
                var swiper = this;
                if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) {
                  return;
                }
                var scrollbar = swiper.scrollbar;
                var rtl = swiper.rtlTranslate;
                var progress = swiper.progress;
                var dragSize = scrollbar.dragSize;
                var trackSize = scrollbar.trackSize;
                var $dragEl = scrollbar.$dragEl;
                var $el = scrollbar.$el;
                var params = swiper.params.scrollbar;
                var newSize = dragSize;
                var newPos = (trackSize - dragSize) * progress;
                if (rtl) {
                  newPos = -newPos;
                  if (newPos > 0) {
                    newSize = dragSize - newPos;
                    newPos = 0;
                  } else if (-newPos + dragSize > trackSize) {
                    newSize = trackSize + newPos;
                  }
                } else if (newPos < 0) {
                  newSize = dragSize + newPos;
                  newPos = 0;
                } else if (newPos + dragSize > trackSize) {
                  newSize = trackSize - newPos;
                }
                if (swiper.isHorizontal()) {
                  if (Support.transforms3d) {
                    $dragEl.transform("translate3d(" + newPos + "px, 0, 0)");
                  } else {
                    $dragEl.transform("translateX(" + newPos + "px)");
                  }
                  $dragEl[0].style.width = newSize + "px";
                } else {
                  if (Support.transforms3d) {
                    $dragEl.transform("translate3d(0px, " + newPos + "px, 0)");
                  } else {
                    $dragEl.transform("translateY(" + newPos + "px)");
                  }
                  $dragEl[0].style.height = newSize + "px";
                }
                if (params.hide) {
                  clearTimeout(swiper.scrollbar.timeout);
                  $el[0].style.opacity = 1;
                  swiper.scrollbar.timeout = setTimeout(function () {
                    $el[0].style.opacity = 0;
                    $el.transition(400);
                  }, 1000);
                }
              },
              setTransition: function setTransition(duration) {
                var swiper = this;
                if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) {
                  return;
                }
                swiper.scrollbar.$dragEl.transition(duration);
              },
              updateSize: function updateSize() {
                var swiper = this;
                if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) {
                  return;
                }
                var scrollbar = swiper.scrollbar;
                var $dragEl = scrollbar.$dragEl;
                var $el = scrollbar.$el;
                $dragEl[0].style.width = '';
                $dragEl[0].style.height = '';
                var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;
                var divider = swiper.size / swiper.virtualSize;
                var moveDivider = divider * (trackSize / swiper.size);
                var dragSize;
                if (swiper.params.scrollbar.dragSize === 'auto') {
                  dragSize = trackSize * divider;
                } else {
                  dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
                }
                if (swiper.isHorizontal()) {
                  $dragEl[0].style.width = dragSize + "px";
                } else {
                  $dragEl[0].style.height = dragSize + "px";
                }
                if (divider >= 1) {
                  $el[0].style.display = 'none';
                } else {
                  $el[0].style.display = '';
                }
                if (swiper.params.scrollbar.hide) {
                  $el[0].style.opacity = 0;
                }
                Utils.extend(scrollbar, {
                  trackSize: trackSize,
                  divider: divider,
                  moveDivider: moveDivider,
                  dragSize: dragSize
                });
                scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);
              },
              getPointerPosition: function getPointerPosition(e) {
                var swiper = this;
                if (swiper.isHorizontal()) {
                  return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX || e.clientX;
                }
                return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY || e.clientY;
              },
              setDragPosition: function setDragPosition(e) {
                var swiper = this;
                var scrollbar = swiper.scrollbar;
                var rtl = swiper.rtlTranslate;
                var $el = scrollbar.$el;
                var dragSize = scrollbar.dragSize;
                var trackSize = scrollbar.trackSize;
                var dragStartPos = scrollbar.dragStartPos;
                var positionRatio;
                positionRatio = (scrollbar.getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
                positionRatio = Math.max(Math.min(positionRatio, 1), 0);
                if (rtl) {
                  positionRatio = 1 - positionRatio;
                }
                var position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;
                swiper.updateProgress(position);
                swiper.setTranslate(position);
                swiper.updateActiveIndex();
                swiper.updateSlidesClasses();
              },
              onDragStart: function onDragStart(e) {
                var swiper = this;
                var params = swiper.params.scrollbar;
                var scrollbar = swiper.scrollbar;
                var $wrapperEl = swiper.$wrapperEl;
                var $el = scrollbar.$el;
                var $dragEl = scrollbar.$dragEl;
                swiper.scrollbar.isTouched = true;
                swiper.scrollbar.dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;
                e.preventDefault();
                e.stopPropagation();
                $wrapperEl.transition(100);
                $dragEl.transition(100);
                scrollbar.setDragPosition(e);
                clearTimeout(swiper.scrollbar.dragTimeout);
                $el.transition(0);
                if (params.hide) {
                  $el.css('opacity', 1);
                }
                swiper.emit('scrollbarDragStart', e);
              },
              onDragMove: function onDragMove(e) {
                var swiper = this;
                var scrollbar = swiper.scrollbar;
                var $wrapperEl = swiper.$wrapperEl;
                var $el = scrollbar.$el;
                var $dragEl = scrollbar.$dragEl;
                if (!swiper.scrollbar.isTouched) {
                  return;
                }
                if (e.preventDefault) {
                  e.preventDefault();
                } else {
                  e.returnValue = false;
                }
                scrollbar.setDragPosition(e);
                $wrapperEl.transition(0);
                $el.transition(0);
                $dragEl.transition(0);
                swiper.emit('scrollbarDragMove', e);
              },
              onDragEnd: function onDragEnd(e) {
                var swiper = this;
                var params = swiper.params.scrollbar;
                var scrollbar = swiper.scrollbar;
                var $el = scrollbar.$el;
                if (!swiper.scrollbar.isTouched) {
                  return;
                }
                swiper.scrollbar.isTouched = false;
                if (params.hide) {
                  clearTimeout(swiper.scrollbar.dragTimeout);
                  swiper.scrollbar.dragTimeout = Utils.nextTick(function () {
                    $el.css('opacity', 0);
                    $el.transition(400);
                  }, 1000);
                }
                swiper.emit('scrollbarDragEnd', e);
                if (params.snapOnRelease) {
                  swiper.slideToClosest();
                }
              },
              enableDraggable: function enableDraggable() {
                var swiper = this;
                if (!swiper.params.scrollbar.el) {
                  return;
                }
                var scrollbar = swiper.scrollbar;
                var touchEventsTouch = swiper.touchEventsTouch;
                var touchEventsDesktop = swiper.touchEventsDesktop;
                var params = swiper.params;
                var $el = scrollbar.$el;
                var target = $el[0];
                var activeListener = Support.passiveListener && params.passiveListeners ? {
                  passive: false,
                  capture: false
                } : false;
                var passiveListener = Support.passiveListener && params.passiveListeners ? {
                  passive: true,
                  capture: false
                } : false;
                if (!Support.touch) {
                  target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
                  doc.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
                  doc.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
                } else {
                  target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
                  target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
                  target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
                }
              },
              disableDraggable: function disableDraggable() {
                var swiper = this;
                if (!swiper.params.scrollbar.el) {
                  return;
                }
                var scrollbar = swiper.scrollbar;
                var touchEventsTouch = swiper.touchEventsTouch;
                var touchEventsDesktop = swiper.touchEventsDesktop;
                var params = swiper.params;
                var $el = scrollbar.$el;
                var target = $el[0];
                var activeListener = Support.passiveListener && params.passiveListeners ? {
                  passive: false,
                  capture: false
                } : false;
                var passiveListener = Support.passiveListener && params.passiveListeners ? {
                  passive: true,
                  capture: false
                } : false;
                if (!Support.touch) {
                  target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
                  doc.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
                  doc.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
                } else {
                  target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
                  target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
                  target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
                }
              },
              init: function init() {
                var swiper = this;
                if (!swiper.params.scrollbar.el) {
                  return;
                }
                var scrollbar = swiper.scrollbar;
                var $swiperEl = swiper.$el;
                var params = swiper.params.scrollbar;
                var $el = $(params.el);
                if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {
                  $el = $swiperEl.find(params.el);
                }
                var $dragEl = $el.find("." + swiper.params.scrollbar.dragClass);
                if ($dragEl.length === 0) {
                  $dragEl = $("<div class=\"" + swiper.params.scrollbar.dragClass + "\"></div>");
                  $el.append($dragEl);
                }
                Utils.extend(scrollbar, {
                  $el: $el,
                  el: $el[0],
                  $dragEl: $dragEl,
                  dragEl: $dragEl[0]
                });
                if (params.draggable) {
                  scrollbar.enableDraggable();
                }
              },
              destroy: function destroy() {
                var swiper = this;
                swiper.scrollbar.disableDraggable();
              }
            };
            var Scrollbar$1 = {
              name: 'scrollbar',
              params: {
                scrollbar: {
                  el: null,
                  dragSize: 'auto',
                  hide: false,
                  draggable: false,
                  snapOnRelease: true,
                  lockClass: 'swiper-scrollbar-lock',
                  dragClass: 'swiper-scrollbar-drag'
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  scrollbar: {
                    init: Scrollbar.init.bind(swiper),
                    destroy: Scrollbar.destroy.bind(swiper),
                    updateSize: Scrollbar.updateSize.bind(swiper),
                    setTranslate: Scrollbar.setTranslate.bind(swiper),
                    setTransition: Scrollbar.setTransition.bind(swiper),
                    enableDraggable: Scrollbar.enableDraggable.bind(swiper),
                    disableDraggable: Scrollbar.disableDraggable.bind(swiper),
                    setDragPosition: Scrollbar.setDragPosition.bind(swiper),
                    getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),
                    onDragStart: Scrollbar.onDragStart.bind(swiper),
                    onDragMove: Scrollbar.onDragMove.bind(swiper),
                    onDragEnd: Scrollbar.onDragEnd.bind(swiper),
                    isTouched: false,
                    timeout: null,
                    dragTimeout: null
                  }
                });
              },
              on: {
                init: function init() {
                  var swiper = this;
                  swiper.scrollbar.init();
                  swiper.scrollbar.updateSize();
                  swiper.scrollbar.setTranslate();
                },
                update: function update() {
                  var swiper = this;
                  swiper.scrollbar.updateSize();
                },
                resize: function resize() {
                  var swiper = this;
                  swiper.scrollbar.updateSize();
                },
                observerUpdate: function observerUpdate() {
                  var swiper = this;
                  swiper.scrollbar.updateSize();
                },
                setTranslate: function setTranslate() {
                  var swiper = this;
                  swiper.scrollbar.setTranslate();
                },
                setTransition: function setTransition(duration) {
                  var swiper = this;
                  swiper.scrollbar.setTransition(duration);
                },
                destroy: function destroy() {
                  var swiper = this;
                  swiper.scrollbar.destroy();
                }
              }
            };
            var Parallax = {
              setTransform: function setTransform(el, progress) {
                var swiper = this;
                var rtl = swiper.rtl;
                var $el = $(el);
                var rtlFactor = rtl ? -1 : 1;
                var p = $el.attr('data-swiper-parallax') || '0';
                var x = $el.attr('data-swiper-parallax-x');
                var y = $el.attr('data-swiper-parallax-y');
                var scale = $el.attr('data-swiper-parallax-scale');
                var opacity = $el.attr('data-swiper-parallax-opacity');
                if (x || y) {
                  x = x || '0';
                  y = y || '0';
                } else if (swiper.isHorizontal()) {
                  x = p;
                  y = '0';
                } else {
                  y = p;
                  x = '0';
                }
                if (x.indexOf('%') >= 0) {
                  x = parseInt(x, 10) * progress * rtlFactor + "%";
                } else {
                  x = x * progress * rtlFactor + "px";
                }
                if (y.indexOf('%') >= 0) {
                  y = parseInt(y, 10) * progress + "%";
                } else {
                  y = y * progress + "px";
                }
                if (typeof opacity !== 'undefined' && opacity !== null) {
                  var currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));
                  $el[0].style.opacity = currentOpacity;
                }
                if (typeof scale === 'undefined' || scale === null) {
                  $el.transform("translate3d(" + x + ", " + y + ", 0px)");
                } else {
                  var currentScale = scale - (scale - 1) * (1 - Math.abs(progress));
                  $el.transform("translate3d(" + x + ", " + y + ", 0px) scale(" + currentScale + ")");
                }
              },
              setTranslate: function setTranslate() {
                var swiper = this;
                var $el = swiper.$el;
                var slides = swiper.slides;
                var progress = swiper.progress;
                var snapGrid = swiper.snapGrid;
                $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (index, el) {
                  swiper.parallax.setTransform(el, progress);
                });
                slides.each(function (slideIndex, slideEl) {
                  var slideProgress = slideEl.progress;
                  if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
                    slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);
                  }
                  slideProgress = Math.min(Math.max(slideProgress, -1), 1);
                  $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (index, el) {
                    swiper.parallax.setTransform(el, slideProgress);
                  });
                });
              },
              setTransition: function setTransition(duration) {
                if (duration === void 0) duration = this.params.speed;
                var swiper = this;
                var $el = swiper.$el;
                $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (index, parallaxEl) {
                  var $parallaxEl = $(parallaxEl);
                  var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;
                  if (duration === 0) {
                    parallaxDuration = 0;
                  }
                  $parallaxEl.transition(parallaxDuration);
                });
              }
            };
            var Parallax$1 = {
              name: 'parallax',
              params: {
                parallax: {
                  enabled: false
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  parallax: {
                    setTransform: Parallax.setTransform.bind(swiper),
                    setTranslate: Parallax.setTranslate.bind(swiper),
                    setTransition: Parallax.setTransition.bind(swiper)
                  }
                });
              },
              on: {
                beforeInit: function beforeInit() {
                  var swiper = this;
                  if (!swiper.params.parallax.enabled) {
                    return;
                  }
                  swiper.params.watchSlidesProgress = true;
                  swiper.originalParams.watchSlidesProgress = true;
                },
                init: function init() {
                  var swiper = this;
                  if (!swiper.params.parallax.enabled) {
                    return;
                  }
                  swiper.parallax.setTranslate();
                },
                setTranslate: function setTranslate() {
                  var swiper = this;
                  if (!swiper.params.parallax.enabled) {
                    return;
                  }
                  swiper.parallax.setTranslate();
                },
                setTransition: function setTransition(duration) {
                  var swiper = this;
                  if (!swiper.params.parallax.enabled) {
                    return;
                  }
                  swiper.parallax.setTransition(duration);
                }
              }
            };
            var Zoom = {
              // Calc Scale From Multi-touches
              getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {
                if (e.targetTouches.length < 2) {
                  return 1;
                }
                var x1 = e.targetTouches[0].pageX;
                var y1 = e.targetTouches[0].pageY;
                var x2 = e.targetTouches[1].pageX;
                var y2 = e.targetTouches[1].pageY;
                var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
                return distance;
              },
              // Events
              onGestureStart: function onGestureStart(e) {
                var swiper = this;
                var params = swiper.params.zoom;
                var zoom = swiper.zoom;
                var gesture = zoom.gesture;
                zoom.fakeGestureTouched = false;
                zoom.fakeGestureMoved = false;
                if (!Support.gestures) {
                  if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {
                    return;
                  }
                  zoom.fakeGestureTouched = true;
                  gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);
                }
                if (!gesture.$slideEl || !gesture.$slideEl.length) {
                  gesture.$slideEl = $(e.target).closest('.swiper-slide');
                  if (gesture.$slideEl.length === 0) {
                    gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
                  }
                  gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');
                  gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass);
                  gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
                  if (gesture.$imageWrapEl.length === 0) {
                    gesture.$imageEl = undefined;
                    return;
                  }
                }
                gesture.$imageEl.transition(0);
                swiper.zoom.isScaling = true;
              },
              onGestureChange: function onGestureChange(e) {
                var swiper = this;
                var params = swiper.params.zoom;
                var zoom = swiper.zoom;
                var gesture = zoom.gesture;
                if (!Support.gestures) {
                  if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {
                    return;
                  }
                  zoom.fakeGestureMoved = true;
                  gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);
                }
                if (!gesture.$imageEl || gesture.$imageEl.length === 0) {
                  return;
                }
                if (Support.gestures) {
                  zoom.scale = e.scale * zoom.currentScale;
                } else {
                  zoom.scale = gesture.scaleMove / gesture.scaleStart * zoom.currentScale;
                }
                if (zoom.scale > gesture.maxRatio) {
                  zoom.scale = gesture.maxRatio - 1 + Math.pow(zoom.scale - gesture.maxRatio + 1, 0.5);
                }
                if (zoom.scale < params.minRatio) {
                  zoom.scale = params.minRatio + 1 - Math.pow(params.minRatio - zoom.scale + 1, 0.5);
                }
                gesture.$imageEl.transform("translate3d(0,0,0) scale(" + zoom.scale + ")");
              },
              onGestureEnd: function onGestureEnd(e) {
                var swiper = this;
                var params = swiper.params.zoom;
                var zoom = swiper.zoom;
                var gesture = zoom.gesture;
                if (!Support.gestures) {
                  if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {
                    return;
                  }
                  if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android) {
                    return;
                  }
                  zoom.fakeGestureTouched = false;
                  zoom.fakeGestureMoved = false;
                }
                if (!gesture.$imageEl || gesture.$imageEl.length === 0) {
                  return;
                }
                zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
                gesture.$imageEl.transition(swiper.params.speed).transform("translate3d(0,0,0) scale(" + zoom.scale + ")");
                zoom.currentScale = zoom.scale;
                zoom.isScaling = false;
                if (zoom.scale === 1) {
                  gesture.$slideEl = undefined;
                }
              },
              onTouchStart: function onTouchStart(e) {
                var swiper = this;
                var zoom = swiper.zoom;
                var gesture = zoom.gesture;
                var image = zoom.image;
                if (!gesture.$imageEl || gesture.$imageEl.length === 0) {
                  return;
                }
                if (image.isTouched) {
                  return;
                }
                if (Device.android) {
                  e.preventDefault();
                }
                image.isTouched = true;
                image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
                image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
              },
              onTouchMove: function onTouchMove(e) {
                var swiper = this;
                var zoom = swiper.zoom;
                var gesture = zoom.gesture;
                var image = zoom.image;
                var velocity = zoom.velocity;
                if (!gesture.$imageEl || gesture.$imageEl.length === 0) {
                  return;
                }
                swiper.allowClick = false;
                if (!image.isTouched || !gesture.$slideEl) {
                  return;
                }
                if (!image.isMoved) {
                  image.width = gesture.$imageEl[0].offsetWidth;
                  image.height = gesture.$imageEl[0].offsetHeight;
                  image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;
                  image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;
                  gesture.slideWidth = gesture.$slideEl[0].offsetWidth;
                  gesture.slideHeight = gesture.$slideEl[0].offsetHeight;
                  gesture.$imageWrapEl.transition(0);
                  if (swiper.rtl) {
                    image.startX = -image.startX;
                    image.startY = -image.startY;
                  }
                }
                // Define if we need image drag
                var scaledWidth = image.width * zoom.scale;
                var scaledHeight = image.height * zoom.scale;
                if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) {
                  return;
                }
                image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
                image.maxX = -image.minX;
                image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
                image.maxY = -image.minY;
                image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
                image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
                if (!image.isMoved && !zoom.isScaling) {
                  if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {
                    image.isTouched = false;
                    return;
                  }
                  if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {
                    image.isTouched = false;
                    return;
                  }
                }
                e.preventDefault();
                e.stopPropagation();
                image.isMoved = true;
                image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;
                image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;
                if (image.currentX < image.minX) {
                  image.currentX = image.minX + 1 - Math.pow(image.minX - image.currentX + 1, 0.8);
                }
                if (image.currentX > image.maxX) {
                  image.currentX = image.maxX - 1 + Math.pow(image.currentX - image.maxX + 1, 0.8);
                }
                if (image.currentY < image.minY) {
                  image.currentY = image.minY + 1 - Math.pow(image.minY - image.currentY + 1, 0.8);
                }
                if (image.currentY > image.maxY) {
                  image.currentY = image.maxY - 1 + Math.pow(image.currentY - image.maxY + 1, 0.8);
                }

                // Velocity
                if (!velocity.prevPositionX) {
                  velocity.prevPositionX = image.touchesCurrent.x;
                }
                if (!velocity.prevPositionY) {
                  velocity.prevPositionY = image.touchesCurrent.y;
                }
                if (!velocity.prevTime) {
                  velocity.prevTime = Date.now();
                }
                velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
                velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
                if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) {
                  velocity.x = 0;
                }
                if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) {
                  velocity.y = 0;
                }
                velocity.prevPositionX = image.touchesCurrent.x;
                velocity.prevPositionY = image.touchesCurrent.y;
                velocity.prevTime = Date.now();
                gesture.$imageWrapEl.transform("translate3d(" + image.currentX + "px, " + image.currentY + "px,0)");
              },
              onTouchEnd: function onTouchEnd() {
                var swiper = this;
                var zoom = swiper.zoom;
                var gesture = zoom.gesture;
                var image = zoom.image;
                var velocity = zoom.velocity;
                if (!gesture.$imageEl || gesture.$imageEl.length === 0) {
                  return;
                }
                if (!image.isTouched || !image.isMoved) {
                  image.isTouched = false;
                  image.isMoved = false;
                  return;
                }
                image.isTouched = false;
                image.isMoved = false;
                var momentumDurationX = 300;
                var momentumDurationY = 300;
                var momentumDistanceX = velocity.x * momentumDurationX;
                var newPositionX = image.currentX + momentumDistanceX;
                var momentumDistanceY = velocity.y * momentumDurationY;
                var newPositionY = image.currentY + momentumDistanceY;

                // Fix duration
                if (velocity.x !== 0) {
                  momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
                }
                if (velocity.y !== 0) {
                  momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
                }
                var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
                image.currentX = newPositionX;
                image.currentY = newPositionY;

                // Define if we need image drag
                var scaledWidth = image.width * zoom.scale;
                var scaledHeight = image.height * zoom.scale;
                image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
                image.maxX = -image.minX;
                image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
                image.maxY = -image.minY;
                image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
                image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
                gesture.$imageWrapEl.transition(momentumDuration).transform("translate3d(" + image.currentX + "px, " + image.currentY + "px,0)");
              },
              onTransitionEnd: function onTransitionEnd() {
                var swiper = this;
                var zoom = swiper.zoom;
                var gesture = zoom.gesture;
                if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {
                  gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');
                  gesture.$imageWrapEl.transform('translate3d(0,0,0)');
                  zoom.scale = 1;
                  zoom.currentScale = 1;
                  gesture.$slideEl = undefined;
                  gesture.$imageEl = undefined;
                  gesture.$imageWrapEl = undefined;
                }
              },
              // Toggle Zoom
              toggle: function toggle(e) {
                var swiper = this;
                var zoom = swiper.zoom;
                if (zoom.scale && zoom.scale !== 1) {
                  // Zoom Out
                  zoom.out();
                } else {
                  // Zoom In
                  zoom.in(e);
                }
              },
              in: function in$1(e) {
                var swiper = this;
                var zoom = swiper.zoom;
                var params = swiper.params.zoom;
                var gesture = zoom.gesture;
                var image = zoom.image;
                if (!gesture.$slideEl) {
                  gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);
                  gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');
                  gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass);
                }
                if (!gesture.$imageEl || gesture.$imageEl.length === 0) {
                  return;
                }
                gesture.$slideEl.addClass("" + params.zoomedSlideClass);
                var touchX;
                var touchY;
                var offsetX;
                var offsetY;
                var diffX;
                var diffY;
                var translateX;
                var translateY;
                var imageWidth;
                var imageHeight;
                var scaledWidth;
                var scaledHeight;
                var translateMinX;
                var translateMinY;
                var translateMaxX;
                var translateMaxY;
                var slideWidth;
                var slideHeight;
                if (typeof image.touchesStart.x === 'undefined' && e) {
                  touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
                  touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
                } else {
                  touchX = image.touchesStart.x;
                  touchY = image.touchesStart.y;
                }
                zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
                zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
                if (e) {
                  slideWidth = gesture.$slideEl[0].offsetWidth;
                  slideHeight = gesture.$slideEl[0].offsetHeight;
                  offsetX = gesture.$slideEl.offset().left;
                  offsetY = gesture.$slideEl.offset().top;
                  diffX = offsetX + slideWidth / 2 - touchX;
                  diffY = offsetY + slideHeight / 2 - touchY;
                  imageWidth = gesture.$imageEl[0].offsetWidth;
                  imageHeight = gesture.$imageEl[0].offsetHeight;
                  scaledWidth = imageWidth * zoom.scale;
                  scaledHeight = imageHeight * zoom.scale;
                  translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);
                  translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);
                  translateMaxX = -translateMinX;
                  translateMaxY = -translateMinY;
                  translateX = diffX * zoom.scale;
                  translateY = diffY * zoom.scale;
                  if (translateX < translateMinX) {
                    translateX = translateMinX;
                  }
                  if (translateX > translateMaxX) {
                    translateX = translateMaxX;
                  }
                  if (translateY < translateMinY) {
                    translateY = translateMinY;
                  }
                  if (translateY > translateMaxY) {
                    translateY = translateMaxY;
                  }
                } else {
                  translateX = 0;
                  translateY = 0;
                }
                gesture.$imageWrapEl.transition(300).transform("translate3d(" + translateX + "px, " + translateY + "px,0)");
                gesture.$imageEl.transition(300).transform("translate3d(0,0,0) scale(" + zoom.scale + ")");
              },
              out: function out() {
                var swiper = this;
                var zoom = swiper.zoom;
                var params = swiper.params.zoom;
                var gesture = zoom.gesture;
                if (!gesture.$slideEl) {
                  gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);
                  gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');
                  gesture.$imageWrapEl = gesture.$imageEl.parent("." + params.containerClass);
                }
                if (!gesture.$imageEl || gesture.$imageEl.length === 0) {
                  return;
                }
                zoom.scale = 1;
                zoom.currentScale = 1;
                gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');
                gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');
                gesture.$slideEl.removeClass("" + params.zoomedSlideClass);
                gesture.$slideEl = undefined;
              },
              // Attach/Detach Events
              enable: function enable() {
                var swiper = this;
                var zoom = swiper.zoom;
                if (zoom.enabled) {
                  return;
                }
                zoom.enabled = true;
                var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? {
                  passive: true,
                  capture: false
                } : false;

                // Scale image
                if (Support.gestures) {
                  swiper.$wrapperEl.on('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);
                  swiper.$wrapperEl.on('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);
                  swiper.$wrapperEl.on('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);
                } else if (swiper.touchEvents.start === 'touchstart') {
                  swiper.$wrapperEl.on(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);
                  swiper.$wrapperEl.on(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);
                  swiper.$wrapperEl.on(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);
                }

                // Move image
                swiper.$wrapperEl.on(swiper.touchEvents.move, "." + swiper.params.zoom.containerClass, zoom.onTouchMove);
              },
              disable: function disable() {
                var swiper = this;
                var zoom = swiper.zoom;
                if (!zoom.enabled) {
                  return;
                }
                swiper.zoom.enabled = false;
                var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? {
                  passive: true,
                  capture: false
                } : false;

                // Scale image
                if (Support.gestures) {
                  swiper.$wrapperEl.off('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);
                  swiper.$wrapperEl.off('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);
                  swiper.$wrapperEl.off('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);
                } else if (swiper.touchEvents.start === 'touchstart') {
                  swiper.$wrapperEl.off(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);
                  swiper.$wrapperEl.off(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);
                  swiper.$wrapperEl.off(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);
                }

                // Move image
                swiper.$wrapperEl.off(swiper.touchEvents.move, "." + swiper.params.zoom.containerClass, zoom.onTouchMove);
              }
            };
            var Zoom$1 = {
              name: 'zoom',
              params: {
                zoom: {
                  enabled: false,
                  maxRatio: 3,
                  minRatio: 1,
                  toggle: true,
                  containerClass: 'swiper-zoom-container',
                  zoomedSlideClass: 'swiper-slide-zoomed'
                }
              },
              create: function create() {
                var swiper = this;
                var zoom = {
                  enabled: false,
                  scale: 1,
                  currentScale: 1,
                  isScaling: false,
                  gesture: {
                    $slideEl: undefined,
                    slideWidth: undefined,
                    slideHeight: undefined,
                    $imageEl: undefined,
                    $imageWrapEl: undefined,
                    maxRatio: 3
                  },
                  image: {
                    isTouched: undefined,
                    isMoved: undefined,
                    currentX: undefined,
                    currentY: undefined,
                    minX: undefined,
                    minY: undefined,
                    maxX: undefined,
                    maxY: undefined,
                    width: undefined,
                    height: undefined,
                    startX: undefined,
                    startY: undefined,
                    touchesStart: {},
                    touchesCurrent: {}
                  },
                  velocity: {
                    x: undefined,
                    y: undefined,
                    prevPositionX: undefined,
                    prevPositionY: undefined,
                    prevTime: undefined
                  }
                };
                'onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out'.split(' ').forEach(function (methodName) {
                  zoom[methodName] = Zoom[methodName].bind(swiper);
                });
                Utils.extend(swiper, {
                  zoom: zoom
                });
                var scale = 1;
                Object.defineProperty(swiper.zoom, 'scale', {
                  get: function get() {
                    return scale;
                  },
                  set: function set(value) {
                    if (scale !== value) {
                      var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;
                      var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;
                      swiper.emit('zoomChange', value, imageEl, slideEl);
                    }
                    scale = value;
                  }
                });
              },
              on: {
                init: function init() {
                  var swiper = this;
                  if (swiper.params.zoom.enabled) {
                    swiper.zoom.enable();
                  }
                },
                destroy: function destroy() {
                  var swiper = this;
                  swiper.zoom.disable();
                },
                touchStart: function touchStart(e) {
                  var swiper = this;
                  if (!swiper.zoom.enabled) {
                    return;
                  }
                  swiper.zoom.onTouchStart(e);
                },
                touchEnd: function touchEnd(e) {
                  var swiper = this;
                  if (!swiper.zoom.enabled) {
                    return;
                  }
                  swiper.zoom.onTouchEnd(e);
                },
                doubleTap: function doubleTap(e) {
                  var swiper = this;
                  if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
                    swiper.zoom.toggle(e);
                  }
                },
                transitionEnd: function transitionEnd() {
                  var swiper = this;
                  if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
                    swiper.zoom.onTransitionEnd();
                  }
                }
              }
            };
            var Lazy = {
              loadInSlide: function loadInSlide(index, loadInDuplicate) {
                if (loadInDuplicate === void 0) loadInDuplicate = true;
                var swiper = this;
                var params = swiper.params.lazy;
                if (typeof index === 'undefined') {
                  return;
                }
                if (swiper.slides.length === 0) {
                  return;
                }
                var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
                var $slideEl = isVirtual ? swiper.$wrapperEl.children("." + swiper.params.slideClass + "[data-swiper-slide-index=\"" + index + "\"]") : swiper.slides.eq(index);
                var $images = $slideEl.find("." + params.elementClass + ":not(." + params.loadedClass + "):not(." + params.loadingClass + ")");
                if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {
                  $images = $images.add($slideEl[0]);
                }
                if ($images.length === 0) {
                  return;
                }
                $images.each(function (imageIndex, imageEl) {
                  var $imageEl = $(imageEl);
                  $imageEl.addClass(params.loadingClass);
                  var background = $imageEl.attr('data-background');
                  var src = $imageEl.attr('data-src');
                  var srcset = $imageEl.attr('data-srcset');
                  var sizes = $imageEl.attr('data-sizes');
                  swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, function () {
                    if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) {
                      return;
                    }
                    if (background) {
                      $imageEl.css('background-image', "url(\"" + background + "\")");
                      $imageEl.removeAttr('data-background');
                    } else {
                      if (srcset) {
                        $imageEl.attr('srcset', srcset);
                        $imageEl.removeAttr('data-srcset');
                      }
                      if (sizes) {
                        $imageEl.attr('sizes', sizes);
                        $imageEl.removeAttr('data-sizes');
                      }
                      if (src) {
                        $imageEl.attr('src', src);
                        $imageEl.removeAttr('data-src');
                      }
                    }
                    $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);
                    $slideEl.find("." + params.preloaderClass).remove();
                    if (swiper.params.loop && loadInDuplicate) {
                      var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');
                      if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {
                        var originalSlide = swiper.$wrapperEl.children("[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]:not(." + swiper.params.slideDuplicateClass + ")");
                        swiper.lazy.loadInSlide(originalSlide.index(), false);
                      } else {
                        var duplicatedSlide = swiper.$wrapperEl.children("." + swiper.params.slideDuplicateClass + "[data-swiper-slide-index=\"" + slideOriginalIndex + "\"]");
                        swiper.lazy.loadInSlide(duplicatedSlide.index(), false);
                      }
                    }
                    swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);
                  });
                  swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);
                });
              },
              load: function load() {
                var swiper = this;
                var $wrapperEl = swiper.$wrapperEl;
                var swiperParams = swiper.params;
                var slides = swiper.slides;
                var activeIndex = swiper.activeIndex;
                var isVirtual = swiper.virtual && swiperParams.virtual.enabled;
                var params = swiperParams.lazy;
                var slidesPerView = swiperParams.slidesPerView;
                if (slidesPerView === 'auto') {
                  slidesPerView = 0;
                }
                function slideExist(index) {
                  if (isVirtual) {
                    if ($wrapperEl.children("." + swiperParams.slideClass + "[data-swiper-slide-index=\"" + index + "\"]").length) {
                      return true;
                    }
                  } else if (slides[index]) {
                    return true;
                  }
                  return false;
                }
                function slideIndex(slideEl) {
                  if (isVirtual) {
                    return $(slideEl).attr('data-swiper-slide-index');
                  }
                  return $(slideEl).index();
                }
                if (!swiper.lazy.initialImageLoaded) {
                  swiper.lazy.initialImageLoaded = true;
                }
                if (swiper.params.watchSlidesVisibility) {
                  $wrapperEl.children("." + swiperParams.slideVisibleClass).each(function (elIndex, slideEl) {
                    var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();
                    swiper.lazy.loadInSlide(index);
                  });
                } else if (slidesPerView > 1) {
                  for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {
                    if (slideExist(i)) {
                      swiper.lazy.loadInSlide(i);
                    }
                  }
                } else {
                  swiper.lazy.loadInSlide(activeIndex);
                }
                if (params.loadPrevNext) {
                  if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {
                    var amount = params.loadPrevNextAmount;
                    var spv = slidesPerView;
                    var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);
                    var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);
                    // Next Slides
                    for (var i$1 = activeIndex + slidesPerView; i$1 < maxIndex; i$1 += 1) {
                      if (slideExist(i$1)) {
                        swiper.lazy.loadInSlide(i$1);
                      }
                    }
                    // Prev Slides
                    for (var i$2 = minIndex; i$2 < activeIndex; i$2 += 1) {
                      if (slideExist(i$2)) {
                        swiper.lazy.loadInSlide(i$2);
                      }
                    }
                  } else {
                    var nextSlide = $wrapperEl.children("." + swiperParams.slideNextClass);
                    if (nextSlide.length > 0) {
                      swiper.lazy.loadInSlide(slideIndex(nextSlide));
                    }
                    var prevSlide = $wrapperEl.children("." + swiperParams.slidePrevClass);
                    if (prevSlide.length > 0) {
                      swiper.lazy.loadInSlide(slideIndex(prevSlide));
                    }
                  }
                }
              }
            };
            var Lazy$1 = {
              name: 'lazy',
              params: {
                lazy: {
                  enabled: false,
                  loadPrevNext: false,
                  loadPrevNextAmount: 1,
                  loadOnTransitionStart: false,
                  elementClass: 'swiper-lazy',
                  loadingClass: 'swiper-lazy-loading',
                  loadedClass: 'swiper-lazy-loaded',
                  preloaderClass: 'swiper-lazy-preloader'
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  lazy: {
                    initialImageLoaded: false,
                    load: Lazy.load.bind(swiper),
                    loadInSlide: Lazy.loadInSlide.bind(swiper)
                  }
                });
              },
              on: {
                beforeInit: function beforeInit() {
                  var swiper = this;
                  if (swiper.params.lazy.enabled && swiper.params.preloadImages) {
                    swiper.params.preloadImages = false;
                  }
                },
                init: function init() {
                  var swiper = this;
                  if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {
                    swiper.lazy.load();
                  }
                },
                scroll: function scroll() {
                  var swiper = this;
                  if (swiper.params.freeMode && !swiper.params.freeModeSticky) {
                    swiper.lazy.load();
                  }
                },
                resize: function resize() {
                  var swiper = this;
                  if (swiper.params.lazy.enabled) {
                    swiper.lazy.load();
                  }
                },
                scrollbarDragMove: function scrollbarDragMove() {
                  var swiper = this;
                  if (swiper.params.lazy.enabled) {
                    swiper.lazy.load();
                  }
                },
                transitionStart: function transitionStart() {
                  var swiper = this;
                  if (swiper.params.lazy.enabled) {
                    if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded) {
                      swiper.lazy.load();
                    }
                  }
                },
                transitionEnd: function transitionEnd() {
                  var swiper = this;
                  if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {
                    swiper.lazy.load();
                  }
                }
              }
            };

            /* eslint no-bitwise: ["error", { "allow": [">>"] }] */

            var Controller = {
              LinearSpline: function LinearSpline(x, y) {
                var binarySearch = function search() {
                  var maxIndex;
                  var minIndex;
                  var guess;
                  return function (array, val) {
                    minIndex = -1;
                    maxIndex = array.length;
                    while (maxIndex - minIndex > 1) {
                      guess = maxIndex + minIndex >> 1;
                      if (array[guess] <= val) {
                        minIndex = guess;
                      } else {
                        maxIndex = guess;
                      }
                    }
                    return maxIndex;
                  };
                }();
                this.x = x;
                this.y = y;
                this.lastIndex = x.length - 1;
                // Given an x value (x2), return the expected y2 value:
                // (x1,y1) is the known point before given value,
                // (x3,y3) is the known point after given value.
                var i1;
                var i3;
                this.interpolate = function interpolate(x2) {
                  if (!x2) {
                    return 0;
                  }

                  // Get the indexes of x1 and x3 (the array indexes before and after given x2):
                  i3 = binarySearch(this.x, x2);
                  i1 = i3 - 1;

                  // We have our indexes i1 & i3, so we can calculate already:
                  // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
                  return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];
                };
                return this;
              },
              // xxx: for now i will just save one spline function to to
              getInterpolateFunction: function getInterpolateFunction(c) {
                var swiper = this;
                if (!swiper.controller.spline) {
                  swiper.controller.spline = swiper.params.loop ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);
                }
              },
              setTranslate: function setTranslate(setTranslate$1, byController) {
                var swiper = this;
                var controlled = swiper.controller.control;
                var multiplier;
                var controlledTranslate;
                function setControlledTranslate(c) {
                  // this will create an Interpolate function based on the snapGrids
                  // x is the Grid of the scrolled scroller and y will be the controlled scroller
                  // it makes sense to create this only once and recall it for the interpolation
                  // the function does a lot of value caching for performance
                  var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
                  if (swiper.params.controller.by === 'slide') {
                    swiper.controller.getInterpolateFunction(c);
                    // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
                    // but it did not work out
                    controlledTranslate = -swiper.controller.spline.interpolate(-translate);
                  }
                  if (!controlledTranslate || swiper.params.controller.by === 'container') {
                    multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
                    controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();
                  }
                  if (swiper.params.controller.inverse) {
                    controlledTranslate = c.maxTranslate() - controlledTranslate;
                  }
                  c.updateProgress(controlledTranslate);
                  c.setTranslate(controlledTranslate, swiper);
                  c.updateActiveIndex();
                  c.updateSlidesClasses();
                }
                if (Array.isArray(controlled)) {
                  for (var i = 0; i < controlled.length; i += 1) {
                    if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
                      setControlledTranslate(controlled[i]);
                    }
                  }
                } else if (controlled instanceof Swiper && byController !== controlled) {
                  setControlledTranslate(controlled);
                }
              },
              setTransition: function setTransition(duration, byController) {
                var swiper = this;
                var controlled = swiper.controller.control;
                var i;
                function setControlledTransition(c) {
                  c.setTransition(duration, swiper);
                  if (duration !== 0) {
                    c.transitionStart();
                    if (c.params.autoHeight) {
                      Utils.nextTick(function () {
                        c.updateAutoHeight();
                      });
                    }
                    c.$wrapperEl.transitionEnd(function () {
                      if (!controlled) {
                        return;
                      }
                      if (c.params.loop && swiper.params.controller.by === 'slide') {
                        c.loopFix();
                      }
                      c.transitionEnd();
                    });
                  }
                }
                if (Array.isArray(controlled)) {
                  for (i = 0; i < controlled.length; i += 1) {
                    if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
                      setControlledTransition(controlled[i]);
                    }
                  }
                } else if (controlled instanceof Swiper && byController !== controlled) {
                  setControlledTransition(controlled);
                }
              }
            };
            var Controller$1 = {
              name: 'controller',
              params: {
                controller: {
                  control: undefined,
                  inverse: false,
                  by: 'slide' // or 'container'
                }
              },

              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  controller: {
                    control: swiper.params.controller.control,
                    getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),
                    setTranslate: Controller.setTranslate.bind(swiper),
                    setTransition: Controller.setTransition.bind(swiper)
                  }
                });
              },
              on: {
                update: function update() {
                  var swiper = this;
                  if (!swiper.controller.control) {
                    return;
                  }
                  if (swiper.controller.spline) {
                    swiper.controller.spline = undefined;
                    delete swiper.controller.spline;
                  }
                },
                resize: function resize() {
                  var swiper = this;
                  if (!swiper.controller.control) {
                    return;
                  }
                  if (swiper.controller.spline) {
                    swiper.controller.spline = undefined;
                    delete swiper.controller.spline;
                  }
                },
                observerUpdate: function observerUpdate() {
                  var swiper = this;
                  if (!swiper.controller.control) {
                    return;
                  }
                  if (swiper.controller.spline) {
                    swiper.controller.spline = undefined;
                    delete swiper.controller.spline;
                  }
                },
                setTranslate: function setTranslate(translate, byController) {
                  var swiper = this;
                  if (!swiper.controller.control) {
                    return;
                  }
                  swiper.controller.setTranslate(translate, byController);
                },
                setTransition: function setTransition(duration, byController) {
                  var swiper = this;
                  if (!swiper.controller.control) {
                    return;
                  }
                  swiper.controller.setTransition(duration, byController);
                }
              }
            };
            var a11y = {
              makeElFocusable: function makeElFocusable($el) {
                $el.attr('tabIndex', '0');
                return $el;
              },
              addElRole: function addElRole($el, role) {
                $el.attr('role', role);
                return $el;
              },
              addElLabel: function addElLabel($el, label) {
                $el.attr('aria-label', label);
                return $el;
              },
              disableEl: function disableEl($el) {
                $el.attr('aria-disabled', true);
                return $el;
              },
              enableEl: function enableEl($el) {
                $el.attr('aria-disabled', false);
                return $el;
              },
              onEnterKey: function onEnterKey(e) {
                var swiper = this;
                var params = swiper.params.a11y;
                if (e.keyCode !== 13) {
                  return;
                }
                var $targetEl = $(e.target);
                if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {
                  if (!(swiper.isEnd && !swiper.params.loop)) {
                    swiper.slideNext();
                  }
                  if (swiper.isEnd) {
                    swiper.a11y.notify(params.lastSlideMessage);
                  } else {
                    swiper.a11y.notify(params.nextSlideMessage);
                  }
                }
                if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {
                  if (!(swiper.isBeginning && !swiper.params.loop)) {
                    swiper.slidePrev();
                  }
                  if (swiper.isBeginning) {
                    swiper.a11y.notify(params.firstSlideMessage);
                  } else {
                    swiper.a11y.notify(params.prevSlideMessage);
                  }
                }
                if (swiper.pagination && $targetEl.is("." + swiper.params.pagination.bulletClass)) {
                  $targetEl[0].click();
                }
              },
              notify: function notify(message) {
                var swiper = this;
                var notification = swiper.a11y.liveRegion;
                if (notification.length === 0) {
                  return;
                }
                notification.html('');
                notification.html(message);
              },
              updateNavigation: function updateNavigation() {
                var swiper = this;
                if (swiper.params.loop) {
                  return;
                }
                var ref = swiper.navigation;
                var $nextEl = ref.$nextEl;
                var $prevEl = ref.$prevEl;
                if ($prevEl && $prevEl.length > 0) {
                  if (swiper.isBeginning) {
                    swiper.a11y.disableEl($prevEl);
                  } else {
                    swiper.a11y.enableEl($prevEl);
                  }
                }
                if ($nextEl && $nextEl.length > 0) {
                  if (swiper.isEnd) {
                    swiper.a11y.disableEl($nextEl);
                  } else {
                    swiper.a11y.enableEl($nextEl);
                  }
                }
              },
              updatePagination: function updatePagination() {
                var swiper = this;
                var params = swiper.params.a11y;
                if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
                  swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {
                    var $bulletEl = $(bulletEl);
                    swiper.a11y.makeElFocusable($bulletEl);
                    swiper.a11y.addElRole($bulletEl, 'button');
                    swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));
                  });
                }
              },
              init: function init() {
                var swiper = this;
                swiper.$el.append(swiper.a11y.liveRegion);

                // Navigation
                var params = swiper.params.a11y;
                var $nextEl;
                var $prevEl;
                if (swiper.navigation && swiper.navigation.$nextEl) {
                  $nextEl = swiper.navigation.$nextEl;
                }
                if (swiper.navigation && swiper.navigation.$prevEl) {
                  $prevEl = swiper.navigation.$prevEl;
                }
                if ($nextEl) {
                  swiper.a11y.makeElFocusable($nextEl);
                  swiper.a11y.addElRole($nextEl, 'button');
                  swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);
                  $nextEl.on('keydown', swiper.a11y.onEnterKey);
                }
                if ($prevEl) {
                  swiper.a11y.makeElFocusable($prevEl);
                  swiper.a11y.addElRole($prevEl, 'button');
                  swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);
                  $prevEl.on('keydown', swiper.a11y.onEnterKey);
                }

                // Pagination
                if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
                  swiper.pagination.$el.on('keydown', "." + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey);
                }
              },
              destroy: function destroy() {
                var swiper = this;
                if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) {
                  swiper.a11y.liveRegion.remove();
                }
                var $nextEl;
                var $prevEl;
                if (swiper.navigation && swiper.navigation.$nextEl) {
                  $nextEl = swiper.navigation.$nextEl;
                }
                if (swiper.navigation && swiper.navigation.$prevEl) {
                  $prevEl = swiper.navigation.$prevEl;
                }
                if ($nextEl) {
                  $nextEl.off('keydown', swiper.a11y.onEnterKey);
                }
                if ($prevEl) {
                  $prevEl.off('keydown', swiper.a11y.onEnterKey);
                }

                // Pagination
                if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
                  swiper.pagination.$el.off('keydown', "." + swiper.params.pagination.bulletClass, swiper.a11y.onEnterKey);
                }
              }
            };
            var A11y = {
              name: 'a11y',
              params: {
                a11y: {
                  enabled: true,
                  notificationClass: 'swiper-notification',
                  prevSlideMessage: 'Previous slide',
                  nextSlideMessage: 'Next slide',
                  firstSlideMessage: 'This is the first slide',
                  lastSlideMessage: 'This is the last slide',
                  paginationBulletMessage: 'Go to slide {{index}}'
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  a11y: {
                    liveRegion: $("<span class=\"" + swiper.params.a11y.notificationClass + "\" aria-live=\"assertive\" aria-atomic=\"true\"></span>")
                  }
                });
                Object.keys(a11y).forEach(function (methodName) {
                  swiper.a11y[methodName] = a11y[methodName].bind(swiper);
                });
              },
              on: {
                init: function init() {
                  var swiper = this;
                  if (!swiper.params.a11y.enabled) {
                    return;
                  }
                  swiper.a11y.init();
                  swiper.a11y.updateNavigation();
                },
                toEdge: function toEdge() {
                  var swiper = this;
                  if (!swiper.params.a11y.enabled) {
                    return;
                  }
                  swiper.a11y.updateNavigation();
                },
                fromEdge: function fromEdge() {
                  var swiper = this;
                  if (!swiper.params.a11y.enabled) {
                    return;
                  }
                  swiper.a11y.updateNavigation();
                },
                paginationUpdate: function paginationUpdate() {
                  var swiper = this;
                  if (!swiper.params.a11y.enabled) {
                    return;
                  }
                  swiper.a11y.updatePagination();
                },
                destroy: function destroy() {
                  var swiper = this;
                  if (!swiper.params.a11y.enabled) {
                    return;
                  }
                  swiper.a11y.destroy();
                }
              }
            };
            var History = {
              init: function init() {
                var swiper = this;
                if (!swiper.params.history) {
                  return;
                }
                if (!win.history || !win.history.pushState) {
                  swiper.params.history.enabled = false;
                  swiper.params.hashNavigation.enabled = true;
                  return;
                }
                var history = swiper.history;
                history.initialized = true;
                history.paths = History.getPathValues();
                if (!history.paths.key && !history.paths.value) {
                  return;
                }
                history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);
                if (!swiper.params.history.replaceState) {
                  win.addEventListener('popstate', swiper.history.setHistoryPopState);
                }
              },
              destroy: function destroy() {
                var swiper = this;
                if (!swiper.params.history.replaceState) {
                  win.removeEventListener('popstate', swiper.history.setHistoryPopState);
                }
              },
              setHistoryPopState: function setHistoryPopState() {
                var swiper = this;
                swiper.history.paths = History.getPathValues();
                swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);
              },
              getPathValues: function getPathValues() {
                var pathArray = win.location.pathname.slice(1).split('/').filter(function (part) {
                  return part !== '';
                });
                var total = pathArray.length;
                var key = pathArray[total - 2];
                var value = pathArray[total - 1];
                return {
                  key: key,
                  value: value
                };
              },
              setHistory: function setHistory(key, index) {
                var swiper = this;
                if (!swiper.history.initialized || !swiper.params.history.enabled) {
                  return;
                }
                var slide = swiper.slides.eq(index);
                var value = History.slugify(slide.attr('data-history'));
                if (!win.location.pathname.includes(key)) {
                  value = key + "/" + value;
                }
                var currentState = win.history.state;
                if (currentState && currentState.value === value) {
                  return;
                }
                if (swiper.params.history.replaceState) {
                  win.history.replaceState({
                    value: value
                  }, null, value);
                } else {
                  win.history.pushState({
                    value: value
                  }, null, value);
                }
              },
              slugify: function slugify(text) {
                return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');
              },
              scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {
                var swiper = this;
                if (value) {
                  for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
                    var slide = swiper.slides.eq(i);
                    var slideHistory = History.slugify(slide.attr('data-history'));
                    if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) {
                      var index = slide.index();
                      swiper.slideTo(index, speed, runCallbacks);
                    }
                  }
                } else {
                  swiper.slideTo(0, speed, runCallbacks);
                }
              }
            };
            var History$1 = {
              name: 'history',
              params: {
                history: {
                  enabled: false,
                  replaceState: false,
                  key: 'slides'
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  history: {
                    init: History.init.bind(swiper),
                    setHistory: History.setHistory.bind(swiper),
                    setHistoryPopState: History.setHistoryPopState.bind(swiper),
                    scrollToSlide: History.scrollToSlide.bind(swiper),
                    destroy: History.destroy.bind(swiper)
                  }
                });
              },
              on: {
                init: function init() {
                  var swiper = this;
                  if (swiper.params.history.enabled) {
                    swiper.history.init();
                  }
                },
                destroy: function destroy() {
                  var swiper = this;
                  if (swiper.params.history.enabled) {
                    swiper.history.destroy();
                  }
                },
                transitionEnd: function transitionEnd() {
                  var swiper = this;
                  if (swiper.history.initialized) {
                    swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
                  }
                }
              }
            };
            var HashNavigation = {
              onHashCange: function onHashCange() {
                var swiper = this;
                var newHash = doc.location.hash.replace('#', '');
                var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');
                if (newHash !== activeSlideHash) {
                  var newIndex = swiper.$wrapperEl.children("." + swiper.params.slideClass + "[data-hash=\"" + newHash + "\"]").index();
                  if (typeof newIndex === 'undefined') {
                    return;
                  }
                  swiper.slideTo(newIndex);
                }
              },
              setHash: function setHash() {
                var swiper = this;
                if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) {
                  return;
                }
                if (swiper.params.hashNavigation.replaceState && win.history && win.history.replaceState) {
                  win.history.replaceState(null, null, "#" + swiper.slides.eq(swiper.activeIndex).attr('data-hash') || '');
                } else {
                  var slide = swiper.slides.eq(swiper.activeIndex);
                  var hash = slide.attr('data-hash') || slide.attr('data-history');
                  doc.location.hash = hash || '';
                }
              },
              init: function init() {
                var swiper = this;
                if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) {
                  return;
                }
                swiper.hashNavigation.initialized = true;
                var hash = doc.location.hash.replace('#', '');
                if (hash) {
                  var speed = 0;
                  for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
                    var slide = swiper.slides.eq(i);
                    var slideHash = slide.attr('data-hash') || slide.attr('data-history');
                    if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) {
                      var index = slide.index();
                      swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true);
                    }
                  }
                }
                if (swiper.params.hashNavigation.watchState) {
                  $(win).on('hashchange', swiper.hashNavigation.onHashCange);
                }
              },
              destroy: function destroy() {
                var swiper = this;
                if (swiper.params.hashNavigation.watchState) {
                  $(win).off('hashchange', swiper.hashNavigation.onHashCange);
                }
              }
            };
            var HashNavigation$1 = {
              name: 'hash-navigation',
              params: {
                hashNavigation: {
                  enabled: false,
                  replaceState: false,
                  watchState: false
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  hashNavigation: {
                    initialized: false,
                    init: HashNavigation.init.bind(swiper),
                    destroy: HashNavigation.destroy.bind(swiper),
                    setHash: HashNavigation.setHash.bind(swiper),
                    onHashCange: HashNavigation.onHashCange.bind(swiper)
                  }
                });
              },
              on: {
                init: function init() {
                  var swiper = this;
                  if (swiper.params.hashNavigation.enabled) {
                    swiper.hashNavigation.init();
                  }
                },
                destroy: function destroy() {
                  var swiper = this;
                  if (swiper.params.hashNavigation.enabled) {
                    swiper.hashNavigation.destroy();
                  }
                },
                transitionEnd: function transitionEnd() {
                  var swiper = this;
                  if (swiper.hashNavigation.initialized) {
                    swiper.hashNavigation.setHash();
                  }
                }
              }
            };

            /* eslint no-underscore-dangle: "off" */

            var Autoplay = {
              run: function run() {
                var swiper = this;
                var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);
                var delay = swiper.params.autoplay.delay;
                if ($activeSlideEl.attr('data-swiper-autoplay')) {
                  delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;
                }
                clearTimeout(swiper.autoplay.timeout);
                swiper.autoplay.timeout = Utils.nextTick(function () {
                  if (swiper.params.autoplay.reverseDirection) {
                    if (swiper.params.loop) {
                      swiper.loopFix();
                      swiper.slidePrev(swiper.params.speed, true, true);
                      swiper.emit('autoplay');
                    } else if (!swiper.isBeginning) {
                      swiper.slidePrev(swiper.params.speed, true, true);
                      swiper.emit('autoplay');
                    } else if (!swiper.params.autoplay.stopOnLastSlide) {
                      swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);
                      swiper.emit('autoplay');
                    } else {
                      swiper.autoplay.stop();
                    }
                  } else if (swiper.params.loop) {
                    swiper.loopFix();
                    swiper.slideNext(swiper.params.speed, true, true);
                    swiper.emit('autoplay');
                  } else if (!swiper.isEnd) {
                    swiper.slideNext(swiper.params.speed, true, true);
                    swiper.emit('autoplay');
                  } else if (!swiper.params.autoplay.stopOnLastSlide) {
                    swiper.slideTo(0, swiper.params.speed, true, true);
                    swiper.emit('autoplay');
                  } else {
                    swiper.autoplay.stop();
                  }
                }, delay);
              },
              start: function start() {
                var swiper = this;
                if (typeof swiper.autoplay.timeout !== 'undefined') {
                  return false;
                }
                if (swiper.autoplay.running) {
                  return false;
                }
                swiper.autoplay.running = true;
                swiper.emit('autoplayStart');
                swiper.autoplay.run();
                return true;
              },
              stop: function stop() {
                var swiper = this;
                if (!swiper.autoplay.running) {
                  return false;
                }
                if (typeof swiper.autoplay.timeout === 'undefined') {
                  return false;
                }
                if (swiper.autoplay.timeout) {
                  clearTimeout(swiper.autoplay.timeout);
                  swiper.autoplay.timeout = undefined;
                }
                swiper.autoplay.running = false;
                swiper.emit('autoplayStop');
                return true;
              },
              pause: function pause(speed) {
                var swiper = this;
                if (!swiper.autoplay.running) {
                  return;
                }
                if (swiper.autoplay.paused) {
                  return;
                }
                if (swiper.autoplay.timeout) {
                  clearTimeout(swiper.autoplay.timeout);
                }
                swiper.autoplay.paused = true;
                if (speed === 0 || !swiper.params.autoplay.waitForTransition) {
                  swiper.autoplay.paused = false;
                  swiper.autoplay.run();
                } else {
                  swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);
                  swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
                }
              }
            };
            var Autoplay$1 = {
              name: 'autoplay',
              params: {
                autoplay: {
                  enabled: false,
                  delay: 3000,
                  waitForTransition: true,
                  disableOnInteraction: true,
                  stopOnLastSlide: false,
                  reverseDirection: false
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  autoplay: {
                    running: false,
                    paused: false,
                    run: Autoplay.run.bind(swiper),
                    start: Autoplay.start.bind(swiper),
                    stop: Autoplay.stop.bind(swiper),
                    pause: Autoplay.pause.bind(swiper),
                    onTransitionEnd: function onTransitionEnd(e) {
                      if (!swiper || swiper.destroyed || !swiper.$wrapperEl) {
                        return;
                      }
                      if (e.target !== this) {
                        return;
                      }
                      swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);
                      swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
                      swiper.autoplay.paused = false;
                      if (!swiper.autoplay.running) {
                        swiper.autoplay.stop();
                      } else {
                        swiper.autoplay.run();
                      }
                    }
                  }
                });
              },
              on: {
                init: function init() {
                  var swiper = this;
                  if (swiper.params.autoplay.enabled) {
                    swiper.autoplay.start();
                  }
                },
                beforeTransitionStart: function beforeTransitionStart(speed, internal) {
                  var swiper = this;
                  if (swiper.autoplay.running) {
                    if (internal || !swiper.params.autoplay.disableOnInteraction) {
                      swiper.autoplay.pause(speed);
                    } else {
                      swiper.autoplay.stop();
                    }
                  }
                },
                sliderFirstMove: function sliderFirstMove() {
                  var swiper = this;
                  if (swiper.autoplay.running) {
                    if (swiper.params.autoplay.disableOnInteraction) {
                      swiper.autoplay.stop();
                    } else {
                      swiper.autoplay.pause();
                    }
                  }
                },
                destroy: function destroy() {
                  var swiper = this;
                  if (swiper.autoplay.running) {
                    swiper.autoplay.stop();
                  }
                }
              }
            };
            var Fade = {
              setTranslate: function setTranslate() {
                var swiper = this;
                var slides = swiper.slides;
                for (var i = 0; i < slides.length; i += 1) {
                  var $slideEl = swiper.slides.eq(i);
                  var offset = $slideEl[0].swiperSlideOffset;
                  var tx = -offset;
                  if (!swiper.params.virtualTranslate) {
                    tx -= swiper.translate;
                  }
                  var ty = 0;
                  if (!swiper.isHorizontal()) {
                    ty = tx;
                    tx = 0;
                  }
                  var slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);
                  $slideEl.css({
                    opacity: slideOpacity
                  }).transform("translate3d(" + tx + "px, " + ty + "px, 0px)");
                }
              },
              setTransition: function setTransition(duration) {
                var swiper = this;
                var slides = swiper.slides;
                var $wrapperEl = swiper.$wrapperEl;
                slides.transition(duration);
                if (swiper.params.virtualTranslate && duration !== 0) {
                  var eventTriggered = false;
                  slides.transitionEnd(function () {
                    if (eventTriggered) {
                      return;
                    }
                    if (!swiper || swiper.destroyed) {
                      return;
                    }
                    eventTriggered = true;
                    swiper.animating = false;
                    var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
                    for (var i = 0; i < triggerEvents.length; i += 1) {
                      $wrapperEl.trigger(triggerEvents[i]);
                    }
                  });
                }
              }
            };
            var EffectFade = {
              name: 'effect-fade',
              params: {
                fadeEffect: {
                  crossFade: false
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  fadeEffect: {
                    setTranslate: Fade.setTranslate.bind(swiper),
                    setTransition: Fade.setTransition.bind(swiper)
                  }
                });
              },
              on: {
                beforeInit: function beforeInit() {
                  var swiper = this;
                  if (swiper.params.effect !== 'fade') {
                    return;
                  }
                  swiper.classNames.push(swiper.params.containerModifierClass + "fade");
                  var overwriteParams = {
                    slidesPerView: 1,
                    slidesPerColumn: 1,
                    slidesPerGroup: 1,
                    watchSlidesProgress: true,
                    spaceBetween: 0,
                    virtualTranslate: true
                  };
                  Utils.extend(swiper.params, overwriteParams);
                  Utils.extend(swiper.originalParams, overwriteParams);
                },
                setTranslate: function setTranslate() {
                  var swiper = this;
                  if (swiper.params.effect !== 'fade') {
                    return;
                  }
                  swiper.fadeEffect.setTranslate();
                },
                setTransition: function setTransition(duration) {
                  var swiper = this;
                  if (swiper.params.effect !== 'fade') {
                    return;
                  }
                  swiper.fadeEffect.setTransition(duration);
                }
              }
            };
            var Cube = {
              setTranslate: function setTranslate() {
                var swiper = this;
                var $el = swiper.$el;
                var $wrapperEl = swiper.$wrapperEl;
                var slides = swiper.slides;
                var swiperWidth = swiper.width;
                var swiperHeight = swiper.height;
                var rtl = swiper.rtlTranslate;
                var swiperSize = swiper.size;
                var params = swiper.params.cubeEffect;
                var isHorizontal = swiper.isHorizontal();
                var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
                var wrapperRotate = 0;
                var $cubeShadowEl;
                if (params.shadow) {
                  if (isHorizontal) {
                    $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');
                    if ($cubeShadowEl.length === 0) {
                      $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
                      $wrapperEl.append($cubeShadowEl);
                    }
                    $cubeShadowEl.css({
                      height: swiperWidth + "px"
                    });
                  } else {
                    $cubeShadowEl = $el.find('.swiper-cube-shadow');
                    if ($cubeShadowEl.length === 0) {
                      $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
                      $el.append($cubeShadowEl);
                    }
                  }
                }
                for (var i = 0; i < slides.length; i += 1) {
                  var $slideEl = slides.eq(i);
                  var slideIndex = i;
                  if (isVirtual) {
                    slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);
                  }
                  var slideAngle = slideIndex * 90;
                  var round = Math.floor(slideAngle / 360);
                  if (rtl) {
                    slideAngle = -slideAngle;
                    round = Math.floor(-slideAngle / 360);
                  }
                  var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
                  var tx = 0;
                  var ty = 0;
                  var tz = 0;
                  if (slideIndex % 4 === 0) {
                    tx = -round * 4 * swiperSize;
                    tz = 0;
                  } else if ((slideIndex - 1) % 4 === 0) {
                    tx = 0;
                    tz = -round * 4 * swiperSize;
                  } else if ((slideIndex - 2) % 4 === 0) {
                    tx = swiperSize + round * 4 * swiperSize;
                    tz = swiperSize;
                  } else if ((slideIndex - 3) % 4 === 0) {
                    tx = -swiperSize;
                    tz = 3 * swiperSize + swiperSize * 4 * round;
                  }
                  if (rtl) {
                    tx = -tx;
                  }
                  if (!isHorizontal) {
                    ty = tx;
                    tx = 0;
                  }
                  var transform = "rotateX(" + (isHorizontal ? 0 : -slideAngle) + "deg) rotateY(" + (isHorizontal ? slideAngle : 0) + "deg) translate3d(" + tx + "px, " + ty + "px, " + tz + "px)";
                  if (progress <= 1 && progress > -1) {
                    wrapperRotate = slideIndex * 90 + progress * 90;
                    if (rtl) {
                      wrapperRotate = -slideIndex * 90 - progress * 90;
                    }
                  }
                  $slideEl.transform(transform);
                  if (params.slideShadows) {
                    // Set shadows
                    var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
                    var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
                    if (shadowBefore.length === 0) {
                      shadowBefore = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>");
                      $slideEl.append(shadowBefore);
                    }
                    if (shadowAfter.length === 0) {
                      shadowAfter = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>");
                      $slideEl.append(shadowAfter);
                    }
                    if (shadowBefore.length) {
                      shadowBefore[0].style.opacity = Math.max(-progress, 0);
                    }
                    if (shadowAfter.length) {
                      shadowAfter[0].style.opacity = Math.max(progress, 0);
                    }
                  }
                }
                $wrapperEl.css({
                  '-webkit-transform-origin': "50% 50% -" + swiperSize / 2 + "px",
                  '-moz-transform-origin': "50% 50% -" + swiperSize / 2 + "px",
                  '-ms-transform-origin': "50% 50% -" + swiperSize / 2 + "px",
                  'transform-origin': "50% 50% -" + swiperSize / 2 + "px"
                });
                if (params.shadow) {
                  if (isHorizontal) {
                    $cubeShadowEl.transform("translate3d(0px, " + (swiperWidth / 2 + params.shadowOffset) + "px, " + -swiperWidth / 2 + "px) rotateX(90deg) rotateZ(0deg) scale(" + params.shadowScale + ")");
                  } else {
                    var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
                    var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
                    var scale1 = params.shadowScale;
                    var scale2 = params.shadowScale / multiplier;
                    var offset = params.shadowOffset;
                    $cubeShadowEl.transform("scale3d(" + scale1 + ", 1, " + scale2 + ") translate3d(0px, " + (swiperHeight / 2 + offset) + "px, " + -swiperHeight / 2 / scale2 + "px) rotateX(-90deg)");
                  }
                }
                var zFactor = Browser.isSafari || Browser.isUiWebView ? -swiperSize / 2 : 0;
                $wrapperEl.transform("translate3d(0px,0," + zFactor + "px) rotateX(" + (swiper.isHorizontal() ? 0 : wrapperRotate) + "deg) rotateY(" + (swiper.isHorizontal() ? -wrapperRotate : 0) + "deg)");
              },
              setTransition: function setTransition(duration) {
                var swiper = this;
                var $el = swiper.$el;
                var slides = swiper.slides;
                slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
                if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
                  $el.find('.swiper-cube-shadow').transition(duration);
                }
              }
            };
            var EffectCube = {
              name: 'effect-cube',
              params: {
                cubeEffect: {
                  slideShadows: true,
                  shadow: true,
                  shadowOffset: 20,
                  shadowScale: 0.94
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  cubeEffect: {
                    setTranslate: Cube.setTranslate.bind(swiper),
                    setTransition: Cube.setTransition.bind(swiper)
                  }
                });
              },
              on: {
                beforeInit: function beforeInit() {
                  var swiper = this;
                  if (swiper.params.effect !== 'cube') {
                    return;
                  }
                  swiper.classNames.push(swiper.params.containerModifierClass + "cube");
                  swiper.classNames.push(swiper.params.containerModifierClass + "3d");
                  var overwriteParams = {
                    slidesPerView: 1,
                    slidesPerColumn: 1,
                    slidesPerGroup: 1,
                    watchSlidesProgress: true,
                    resistanceRatio: 0,
                    spaceBetween: 0,
                    centeredSlides: false,
                    virtualTranslate: true
                  };
                  Utils.extend(swiper.params, overwriteParams);
                  Utils.extend(swiper.originalParams, overwriteParams);
                },
                setTranslate: function setTranslate() {
                  var swiper = this;
                  if (swiper.params.effect !== 'cube') {
                    return;
                  }
                  swiper.cubeEffect.setTranslate();
                },
                setTransition: function setTransition(duration) {
                  var swiper = this;
                  if (swiper.params.effect !== 'cube') {
                    return;
                  }
                  swiper.cubeEffect.setTransition(duration);
                }
              }
            };
            var Flip = {
              setTranslate: function setTranslate() {
                var swiper = this;
                var slides = swiper.slides;
                var rtl = swiper.rtlTranslate;
                for (var i = 0; i < slides.length; i += 1) {
                  var $slideEl = slides.eq(i);
                  var progress = $slideEl[0].progress;
                  if (swiper.params.flipEffect.limitRotation) {
                    progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
                  }
                  var offset = $slideEl[0].swiperSlideOffset;
                  var rotate = -180 * progress;
                  var rotateY = rotate;
                  var rotateX = 0;
                  var tx = -offset;
                  var ty = 0;
                  if (!swiper.isHorizontal()) {
                    ty = tx;
                    tx = 0;
                    rotateX = -rotateY;
                    rotateY = 0;
                  } else if (rtl) {
                    rotateY = -rotateY;
                  }
                  $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
                  if (swiper.params.flipEffect.slideShadows) {
                    // Set shadows
                    var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
                    var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
                    if (shadowBefore.length === 0) {
                      shadowBefore = $("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'left' : 'top') + "\"></div>");
                      $slideEl.append(shadowBefore);
                    }
                    if (shadowAfter.length === 0) {
                      shadowAfter = $("<div class=\"swiper-slide-shadow-" + (swiper.isHorizontal() ? 'right' : 'bottom') + "\"></div>");
                      $slideEl.append(shadowAfter);
                    }
                    if (shadowBefore.length) {
                      shadowBefore[0].style.opacity = Math.max(-progress, 0);
                    }
                    if (shadowAfter.length) {
                      shadowAfter[0].style.opacity = Math.max(progress, 0);
                    }
                  }
                  $slideEl.transform("translate3d(" + tx + "px, " + ty + "px, 0px) rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)");
                }
              },
              setTransition: function setTransition(duration) {
                var swiper = this;
                var slides = swiper.slides;
                var activeIndex = swiper.activeIndex;
                var $wrapperEl = swiper.$wrapperEl;
                slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
                if (swiper.params.virtualTranslate && duration !== 0) {
                  var eventTriggered = false;
                  // eslint-disable-next-line
                  slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {
                    if (eventTriggered) {
                      return;
                    }
                    if (!swiper || swiper.destroyed) {
                      return;
                    }
                    // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;
                    eventTriggered = true;
                    swiper.animating = false;
                    var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
                    for (var i = 0; i < triggerEvents.length; i += 1) {
                      $wrapperEl.trigger(triggerEvents[i]);
                    }
                  });
                }
              }
            };
            var EffectFlip = {
              name: 'effect-flip',
              params: {
                flipEffect: {
                  slideShadows: true,
                  limitRotation: true
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  flipEffect: {
                    setTranslate: Flip.setTranslate.bind(swiper),
                    setTransition: Flip.setTransition.bind(swiper)
                  }
                });
              },
              on: {
                beforeInit: function beforeInit() {
                  var swiper = this;
                  if (swiper.params.effect !== 'flip') {
                    return;
                  }
                  swiper.classNames.push(swiper.params.containerModifierClass + "flip");
                  swiper.classNames.push(swiper.params.containerModifierClass + "3d");
                  var overwriteParams = {
                    slidesPerView: 1,
                    slidesPerColumn: 1,
                    slidesPerGroup: 1,
                    watchSlidesProgress: true,
                    spaceBetween: 0,
                    virtualTranslate: true
                  };
                  Utils.extend(swiper.params, overwriteParams);
                  Utils.extend(swiper.originalParams, overwriteParams);
                },
                setTranslate: function setTranslate() {
                  var swiper = this;
                  if (swiper.params.effect !== 'flip') {
                    return;
                  }
                  swiper.flipEffect.setTranslate();
                },
                setTransition: function setTransition(duration) {
                  var swiper = this;
                  if (swiper.params.effect !== 'flip') {
                    return;
                  }
                  swiper.flipEffect.setTransition(duration);
                }
              }
            };
            var Coverflow = {
              setTranslate: function setTranslate() {
                var swiper = this;
                var swiperWidth = swiper.width;
                var swiperHeight = swiper.height;
                var slides = swiper.slides;
                var $wrapperEl = swiper.$wrapperEl;
                var slidesSizesGrid = swiper.slidesSizesGrid;
                var params = swiper.params.coverflowEffect;
                var isHorizontal = swiper.isHorizontal();
                var transform = swiper.translate;
                var center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;
                var rotate = isHorizontal ? params.rotate : -params.rotate;
                var translate = params.depth;
                // Each slide offset from center
                for (var i = 0, length = slides.length; i < length; i += 1) {
                  var $slideEl = slides.eq(i);
                  var slideSize = slidesSizesGrid[i];
                  var slideOffset = $slideEl[0].swiperSlideOffset;
                  var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier;
                  var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
                  var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
                  // var rotateZ = 0
                  var translateZ = -translate * Math.abs(offsetMultiplier);
                  var translateY = isHorizontal ? 0 : params.stretch * offsetMultiplier;
                  var translateX = isHorizontal ? params.stretch * offsetMultiplier : 0;

                  // Fix for ultra small values
                  if (Math.abs(translateX) < 0.001) {
                    translateX = 0;
                  }
                  if (Math.abs(translateY) < 0.001) {
                    translateY = 0;
                  }
                  if (Math.abs(translateZ) < 0.001) {
                    translateZ = 0;
                  }
                  if (Math.abs(rotateY) < 0.001) {
                    rotateY = 0;
                  }
                  if (Math.abs(rotateX) < 0.001) {
                    rotateX = 0;
                  }
                  var slideTransform = "translate3d(" + translateX + "px," + translateY + "px," + translateZ + "px)  rotateX(" + rotateX + "deg) rotateY(" + rotateY + "deg)";
                  $slideEl.transform(slideTransform);
                  $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
                  if (params.slideShadows) {
                    // Set shadows
                    var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
                    var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
                    if ($shadowBeforeEl.length === 0) {
                      $shadowBeforeEl = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'left' : 'top') + "\"></div>");
                      $slideEl.append($shadowBeforeEl);
                    }
                    if ($shadowAfterEl.length === 0) {
                      $shadowAfterEl = $("<div class=\"swiper-slide-shadow-" + (isHorizontal ? 'right' : 'bottom') + "\"></div>");
                      $slideEl.append($shadowAfterEl);
                    }
                    if ($shadowBeforeEl.length) {
                      $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
                    }
                    if ($shadowAfterEl.length) {
                      $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;
                    }
                  }
                }

                // Set correct perspective for IE10
                if (Support.pointerEvents || Support.prefixedPointerEvents) {
                  var ws = $wrapperEl[0].style;
                  ws.perspectiveOrigin = center + "px 50%";
                }
              },
              setTransition: function setTransition(duration) {
                var swiper = this;
                swiper.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
              }
            };
            var EffectCoverflow = {
              name: 'effect-coverflow',
              params: {
                coverflowEffect: {
                  rotate: 50,
                  stretch: 0,
                  depth: 100,
                  modifier: 1,
                  slideShadows: true
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  coverflowEffect: {
                    setTranslate: Coverflow.setTranslate.bind(swiper),
                    setTransition: Coverflow.setTransition.bind(swiper)
                  }
                });
              },
              on: {
                beforeInit: function beforeInit() {
                  var swiper = this;
                  if (swiper.params.effect !== 'coverflow') {
                    return;
                  }
                  swiper.classNames.push(swiper.params.containerModifierClass + "coverflow");
                  swiper.classNames.push(swiper.params.containerModifierClass + "3d");
                  swiper.params.watchSlidesProgress = true;
                  swiper.originalParams.watchSlidesProgress = true;
                },
                setTranslate: function setTranslate() {
                  var swiper = this;
                  if (swiper.params.effect !== 'coverflow') {
                    return;
                  }
                  swiper.coverflowEffect.setTranslate();
                },
                setTransition: function setTransition(duration) {
                  var swiper = this;
                  if (swiper.params.effect !== 'coverflow') {
                    return;
                  }
                  swiper.coverflowEffect.setTransition(duration);
                }
              }
            };
            var Thumbs = {
              init: function init() {
                var swiper = this;
                var ref = swiper.params;
                var thumbsParams = ref.thumbs;
                var SwiperClass = swiper.constructor;
                if (thumbsParams.swiper instanceof SwiperClass) {
                  swiper.thumbs.swiper = thumbsParams.swiper;
                  Utils.extend(swiper.thumbs.swiper.originalParams, {
                    watchSlidesProgress: true,
                    slideToClickedSlide: false
                  });
                  Utils.extend(swiper.thumbs.swiper.params, {
                    watchSlidesProgress: true,
                    slideToClickedSlide: false
                  });
                } else if (Utils.isObject(thumbsParams.swiper)) {
                  swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {
                    watchSlidesVisibility: true,
                    watchSlidesProgress: true,
                    slideToClickedSlide: false
                  }));
                  swiper.thumbs.swiperCreated = true;
                }
                swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);
                swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);
              },
              onThumbClick: function onThumbClick() {
                var swiper = this;
                var thumbsSwiper = swiper.thumbs.swiper;
                if (!thumbsSwiper) {
                  return;
                }
                var clickedIndex = thumbsSwiper.clickedIndex;
                var clickedSlide = thumbsSwiper.clickedSlide;
                if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) {
                  return;
                }
                if (typeof clickedIndex === 'undefined' || clickedIndex === null) {
                  return;
                }
                var slideToIndex;
                if (thumbsSwiper.params.loop) {
                  slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);
                } else {
                  slideToIndex = clickedIndex;
                }
                if (swiper.params.loop) {
                  var currentIndex = swiper.activeIndex;
                  if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {
                    swiper.loopFix();
                    // eslint-disable-next-line
                    swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
                    currentIndex = swiper.activeIndex;
                  }
                  var prevIndex = swiper.slides.eq(currentIndex).prevAll("[data-swiper-slide-index=\"" + slideToIndex + "\"]").eq(0).index();
                  var nextIndex = swiper.slides.eq(currentIndex).nextAll("[data-swiper-slide-index=\"" + slideToIndex + "\"]").eq(0).index();
                  if (typeof prevIndex === 'undefined') {
                    slideToIndex = nextIndex;
                  } else if (typeof nextIndex === 'undefined') {
                    slideToIndex = prevIndex;
                  } else if (nextIndex - currentIndex < currentIndex - prevIndex) {
                    slideToIndex = nextIndex;
                  } else {
                    slideToIndex = prevIndex;
                  }
                }
                swiper.slideTo(slideToIndex);
              },
              update: function update(initial) {
                var swiper = this;
                var thumbsSwiper = swiper.thumbs.swiper;
                if (!thumbsSwiper) {
                  return;
                }
                var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;
                if (swiper.realIndex !== thumbsSwiper.realIndex) {
                  var currentThumbsIndex = thumbsSwiper.activeIndex;
                  var newThumbsIndex;
                  if (thumbsSwiper.params.loop) {
                    if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {
                      thumbsSwiper.loopFix();
                      // eslint-disable-next-line
                      thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;
                      currentThumbsIndex = thumbsSwiper.activeIndex;
                    }
                    // Find actual thumbs index to slide to
                    var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll("[data-swiper-slide-index=\"" + swiper.realIndex + "\"]").eq(0).index();
                    var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll("[data-swiper-slide-index=\"" + swiper.realIndex + "\"]").eq(0).index();
                    if (typeof prevThumbsIndex === 'undefined') {
                      newThumbsIndex = nextThumbsIndex;
                    } else if (typeof nextThumbsIndex === 'undefined') {
                      newThumbsIndex = prevThumbsIndex;
                    } else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) {
                      newThumbsIndex = currentThumbsIndex;
                    } else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) {
                      newThumbsIndex = nextThumbsIndex;
                    } else {
                      newThumbsIndex = prevThumbsIndex;
                    }
                  } else {
                    newThumbsIndex = swiper.realIndex;
                  }
                  if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
                    if (thumbsSwiper.params.centeredSlides) {
                      if (newThumbsIndex > currentThumbsIndex) {
                        newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
                      } else {
                        newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
                      }
                    } else if (newThumbsIndex > currentThumbsIndex) {
                      newThumbsIndex = newThumbsIndex - slidesPerView + 1;
                    }
                    thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
                  }
                }

                // Activate thumbs
                var thumbsToActivate = 1;
                var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
                if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
                  thumbsToActivate = swiper.params.slidesPerView;
                }
                thumbsSwiper.slides.removeClass(thumbActiveClass);
                if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual) {
                  for (var i = 0; i < thumbsToActivate; i += 1) {
                    thumbsSwiper.$wrapperEl.children("[data-swiper-slide-index=\"" + (swiper.realIndex + i) + "\"]").addClass(thumbActiveClass);
                  }
                } else {
                  for (var i$1 = 0; i$1 < thumbsToActivate; i$1 += 1) {
                    thumbsSwiper.slides.eq(swiper.realIndex + i$1).addClass(thumbActiveClass);
                  }
                }
              }
            };
            var Thumbs$1 = {
              name: 'thumbs',
              params: {
                thumbs: {
                  swiper: null,
                  slideThumbActiveClass: 'swiper-slide-thumb-active',
                  thumbsContainerClass: 'swiper-container-thumbs'
                }
              },
              create: function create() {
                var swiper = this;
                Utils.extend(swiper, {
                  thumbs: {
                    swiper: null,
                    init: Thumbs.init.bind(swiper),
                    update: Thumbs.update.bind(swiper),
                    onThumbClick: Thumbs.onThumbClick.bind(swiper)
                  }
                });
              },
              on: {
                beforeInit: function beforeInit() {
                  var swiper = this;
                  var ref = swiper.params;
                  var thumbs = ref.thumbs;
                  if (!thumbs || !thumbs.swiper) {
                    return;
                  }
                  swiper.thumbs.init();
                  swiper.thumbs.update(true);
                },
                slideChange: function slideChange() {
                  var swiper = this;
                  if (!swiper.thumbs.swiper) {
                    return;
                  }
                  swiper.thumbs.update();
                },
                update: function update() {
                  var swiper = this;
                  if (!swiper.thumbs.swiper) {
                    return;
                  }
                  swiper.thumbs.update();
                },
                resize: function resize() {
                  var swiper = this;
                  if (!swiper.thumbs.swiper) {
                    return;
                  }
                  swiper.thumbs.update();
                },
                observerUpdate: function observerUpdate() {
                  var swiper = this;
                  if (!swiper.thumbs.swiper) {
                    return;
                  }
                  swiper.thumbs.update();
                },
                setTransition: function setTransition(duration) {
                  var swiper = this;
                  var thumbsSwiper = swiper.thumbs.swiper;
                  if (!thumbsSwiper) {
                    return;
                  }
                  thumbsSwiper.setTransition(duration);
                },
                beforeDestroy: function beforeDestroy() {
                  var swiper = this;
                  var thumbsSwiper = swiper.thumbs.swiper;
                  if (!thumbsSwiper) {
                    return;
                  }
                  if (swiper.thumbs.swiperCreated && thumbsSwiper) {
                    thumbsSwiper.destroy();
                  }
                }
              }
            };

            // Swiper Class

            var components = [Device$1, Support$1, Browser$1, Resize, Observer$1, Virtual$1, Keyboard$1, Mousewheel$1, Navigation$1, Pagination$1, Scrollbar$1, Parallax$1, Zoom$1, Lazy$1, Controller$1, A11y, History$1, HashNavigation$1, Autoplay$1, EffectFade, EffectCube, EffectFlip, EffectCoverflow, Thumbs$1];
            if (typeof Swiper.use === 'undefined') {
              Swiper.use = Swiper.Class.use;
              Swiper.installModule = Swiper.Class.installModule;
            }
            Swiper.use(components);
            return Swiper;
          });
        })(swiper$1);
        var swiper = '';

        /**
         * SSR Window 2.0.0
         * Better handling for window object in SSR environment
         * https://github.com/nolimits4web/ssr-window
         *
         * Copyright 2020, Vladimir Kharlampidi
         *
         * Licensed under MIT
         *
         * Released on: May 12, 2020
         */
        /* eslint-disable no-param-reassign */
        function isObject$1(obj) {
          return obj !== null && _typeof(obj) === 'object' && 'constructor' in obj && obj.constructor === Object;
        }
        function extend(target, src) {
          if (target === void 0) {
            target = {};
          }
          if (src === void 0) {
            src = {};
          }
          Object.keys(src).forEach(function (key) {
            if (typeof target[key] === 'undefined') target[key] = src[key];else if (isObject$1(src[key]) && isObject$1(target[key]) && Object.keys(src[key]).length > 0) {
              extend(target[key], src[key]);
            }
          });
        }
        var doc$1 = typeof document !== 'undefined' ? document : {};
        var ssrDocument = {
          body: {},
          addEventListener: function addEventListener() {},
          removeEventListener: function removeEventListener() {},
          activeElement: {
            blur: function blur() {},
            nodeName: ''
          },
          querySelector: function querySelector() {
            return null;
          },
          querySelectorAll: function querySelectorAll() {
            return [];
          },
          getElementById: function getElementById() {
            return null;
          },
          createEvent: function createEvent() {
            return {
              initEvent: function initEvent() {}
            };
          },
          createElement: function createElement() {
            return {
              children: [],
              childNodes: [],
              style: {},
              setAttribute: function setAttribute() {},
              getElementsByTagName: function getElementsByTagName() {
                return [];
              }
            };
          },
          createElementNS: function createElementNS() {
            return {};
          },
          importNode: function importNode() {
            return null;
          },
          location: {
            hash: '',
            host: '',
            hostname: '',
            href: '',
            origin: '',
            pathname: '',
            protocol: '',
            search: ''
          }
        };
        extend(doc$1, ssrDocument);
        var win$1 = typeof window !== 'undefined' ? window : {};
        var ssrWindow = {
          document: ssrDocument,
          navigator: {
            userAgent: ''
          },
          location: {
            hash: '',
            host: '',
            hostname: '',
            href: '',
            origin: '',
            pathname: '',
            protocol: '',
            search: ''
          },
          history: {
            replaceState: function replaceState() {},
            pushState: function pushState() {},
            go: function go() {},
            back: function back() {}
          },
          CustomEvent: function CustomEvent() {
            return this;
          },
          addEventListener: function addEventListener() {},
          removeEventListener: function removeEventListener() {},
          getComputedStyle: function getComputedStyle() {
            return {
              getPropertyValue: function getPropertyValue() {
                return '';
              }
            };
          },
          Image: function Image() {},
          Date: function Date() {},
          screen: {},
          setTimeout: function setTimeout() {},
          clearTimeout: function clearTimeout() {},
          matchMedia: function matchMedia() {
            return {};
          }
        };
        extend(win$1, ssrWindow);

        /**
         * Dom7 2.1.5
         * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API
         * http://framework7.io/docs/dom.html
         *
         * Copyright 2020, Vladimir Kharlampidi
         * The iDangero.us
         * http://www.idangero.us/
         *
         * Licensed under MIT
         *
         * Released on: May 15, 2020
         */
        var Dom7 = /*#__PURE__*/_createClass(function Dom7(arr) {
          _classCallCheck(this, Dom7);
          var self = this;
          // Create array-like object
          for (var i = 0; i < arr.length; i += 1) {
            self[i] = arr[i];
          }
          self.length = arr.length;
          // Return collection with methods
          return this;
        });
        function $(selector, context) {
          var arr = [];
          var i = 0;
          if (selector && !context) {
            if (selector instanceof Dom7) {
              return selector;
            }
          }
          if (selector) {
            // String
            if (typeof selector === 'string') {
              var els;
              var tempParent;
              var _html = selector.trim();
              if (_html.indexOf('<') >= 0 && _html.indexOf('>') >= 0) {
                var toCreate = 'div';
                if (_html.indexOf('<li') === 0) toCreate = 'ul';
                if (_html.indexOf('<tr') === 0) toCreate = 'tbody';
                if (_html.indexOf('<td') === 0 || _html.indexOf('<th') === 0) toCreate = 'tr';
                if (_html.indexOf('<tbody') === 0) toCreate = 'table';
                if (_html.indexOf('<option') === 0) toCreate = 'select';
                tempParent = doc$1.createElement(toCreate);
                tempParent.innerHTML = _html;
                for (i = 0; i < tempParent.childNodes.length; i += 1) {
                  arr.push(tempParent.childNodes[i]);
                }
              } else {
                if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) {
                  // Pure ID selector
                  els = [doc$1.getElementById(selector.trim().split('#')[1])];
                } else {
                  // Other selectors
                  els = (context || doc$1).querySelectorAll(selector.trim());
                }
                for (i = 0; i < els.length; i += 1) {
                  if (els[i]) arr.push(els[i]);
                }
              }
            } else if (selector.nodeType || selector === win$1 || selector === doc$1) {
              // Node/element
              arr.push(selector);
            } else if (selector.length > 0 && selector[0].nodeType) {
              // Array of elements or instance of Dom
              for (i = 0; i < selector.length; i += 1) {
                arr.push(selector[i]);
              }
            }
          }
          return new Dom7(arr);
        }
        $.fn = Dom7.prototype;
        $.Class = Dom7;
        $.Dom7 = Dom7;
        function unique(arr) {
          var uniqueArray = [];
          for (var i = 0; i < arr.length; i += 1) {
            if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]);
          }
          return uniqueArray;
        }

        // Classes and attributes
        function addClass(className) {
          if (typeof className === 'undefined') {
            return this;
          }
          var classes = className.split(' ');
          for (var i = 0; i < classes.length; i += 1) {
            for (var j = 0; j < this.length; j += 1) {
              if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.add(classes[i]);
            }
          }
          return this;
        }
        function removeClass(className) {
          var classes = className.split(' ');
          for (var i = 0; i < classes.length; i += 1) {
            for (var j = 0; j < this.length; j += 1) {
              if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.remove(classes[i]);
            }
          }
          return this;
        }
        function hasClass(className) {
          if (!this[0]) return false;
          return this[0].classList.contains(className);
        }
        function toggleClass(className) {
          var classes = className.split(' ');
          for (var i = 0; i < classes.length; i += 1) {
            for (var j = 0; j < this.length; j += 1) {
              if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.toggle(classes[i]);
            }
          }
          return this;
        }
        function attr(attrs, value) {
          if (arguments.length === 1 && typeof attrs === 'string') {
            // Get attr
            if (this[0]) return this[0].getAttribute(attrs);
            return undefined;
          }

          // Set attrs
          for (var i = 0; i < this.length; i += 1) {
            if (arguments.length === 2) {
              // String
              this[i].setAttribute(attrs, value);
            } else {
              // Object
              // eslint-disable-next-line
              for (var attrName in attrs) {
                this[i][attrName] = attrs[attrName];
                this[i].setAttribute(attrName, attrs[attrName]);
              }
            }
          }
          return this;
        }
        // eslint-disable-next-line
        function removeAttr(attr) {
          for (var i = 0; i < this.length; i += 1) {
            this[i].removeAttribute(attr);
          }
          return this;
        }
        function data(key, value) {
          var el;
          if (typeof value === 'undefined') {
            el = this[0];
            // Get value
            if (el) {
              if (el.dom7ElementDataStorage && key in el.dom7ElementDataStorage) {
                return el.dom7ElementDataStorage[key];
              }
              var dataKey = el.getAttribute("data-".concat(key));
              if (dataKey) {
                return dataKey;
              }
              return undefined;
            }
            return undefined;
          }

          // Set value
          for (var i = 0; i < this.length; i += 1) {
            el = this[i];
            if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {};
            el.dom7ElementDataStorage[key] = value;
          }
          return this;
        }
        // Transforms
        // eslint-disable-next-line
        function transform(transform) {
          for (var i = 0; i < this.length; i += 1) {
            var elStyle = this[i].style;
            elStyle.webkitTransform = transform;
            elStyle.transform = transform;
          }
          return this;
        }
        function transition$1(duration) {
          if (typeof duration !== 'string') {
            duration = "".concat(duration, "ms"); // eslint-disable-line
          }

          for (var i = 0; i < this.length; i += 1) {
            var elStyle = this[i].style;
            elStyle.webkitTransitionDuration = duration;
            elStyle.transitionDuration = duration;
          }
          return this;
        }
        // Events
        function on() {
          for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
            args[_key] = arguments[_key];
          }
          var eventType = args[0],
            targetSelector = args[1],
            listener = args[2],
            capture = args[3];
          if (typeof args[1] === 'function') {
            eventType = args[0];
            listener = args[1];
            capture = args[2];
            targetSelector = undefined;
          }
          if (!capture) capture = false;
          function handleLiveEvent(e) {
            var target = e.target;
            if (!target) return;
            var eventData = e.target.dom7EventData || [];
            if (eventData.indexOf(e) < 0) {
              eventData.unshift(e);
            }
            if ($(target).is(targetSelector)) listener.apply(target, eventData);else {
              var _parents = $(target).parents(); // eslint-disable-line
              for (var k = 0; k < _parents.length; k += 1) {
                if ($(_parents[k]).is(targetSelector)) listener.apply(_parents[k], eventData);
              }
            }
          }
          function handleEvent(e) {
            var eventData = e && e.target ? e.target.dom7EventData || [] : [];
            if (eventData.indexOf(e) < 0) {
              eventData.unshift(e);
            }
            listener.apply(this, eventData);
          }
          var events = eventType.split(' ');
          var j;
          for (var i = 0; i < this.length; i += 1) {
            var el = this[i];
            if (!targetSelector) {
              for (j = 0; j < events.length; j += 1) {
                var event = events[j];
                if (!el.dom7Listeners) el.dom7Listeners = {};
                if (!el.dom7Listeners[event]) el.dom7Listeners[event] = [];
                el.dom7Listeners[event].push({
                  listener: listener,
                  proxyListener: handleEvent
                });
                el.addEventListener(event, handleEvent, capture);
              }
            } else {
              // Live events
              for (j = 0; j < events.length; j += 1) {
                var _event = events[j];
                if (!el.dom7LiveListeners) el.dom7LiveListeners = {};
                if (!el.dom7LiveListeners[_event]) el.dom7LiveListeners[_event] = [];
                el.dom7LiveListeners[_event].push({
                  listener: listener,
                  proxyListener: handleLiveEvent
                });
                el.addEventListener(_event, handleLiveEvent, capture);
              }
            }
          }
          return this;
        }
        function off() {
          for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
            args[_key2] = arguments[_key2];
          }
          var eventType = args[0],
            targetSelector = args[1],
            listener = args[2],
            capture = args[3];
          if (typeof args[1] === 'function') {
            eventType = args[0];
            listener = args[1];
            capture = args[2];
            targetSelector = undefined;
          }
          if (!capture) capture = false;
          var events = eventType.split(' ');
          for (var i = 0; i < events.length; i += 1) {
            var event = events[i];
            for (var j = 0; j < this.length; j += 1) {
              var el = this[j];
              var handlers = void 0;
              if (!targetSelector && el.dom7Listeners) {
                handlers = el.dom7Listeners[event];
              } else if (targetSelector && el.dom7LiveListeners) {
                handlers = el.dom7LiveListeners[event];
              }
              if (handlers && handlers.length) {
                for (var k = handlers.length - 1; k >= 0; k -= 1) {
                  var handler = handlers[k];
                  if (listener && handler.listener === listener) {
                    el.removeEventListener(event, handler.proxyListener, capture);
                    handlers.splice(k, 1);
                  } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) {
                    el.removeEventListener(event, handler.proxyListener, capture);
                    handlers.splice(k, 1);
                  } else if (!listener) {
                    el.removeEventListener(event, handler.proxyListener, capture);
                    handlers.splice(k, 1);
                  }
                }
              }
            }
          }
          return this;
        }
        function trigger() {
          for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
            args[_key3] = arguments[_key3];
          }
          var events = args[0].split(' ');
          var eventData = args[1];
          for (var i = 0; i < events.length; i += 1) {
            var event = events[i];
            for (var j = 0; j < this.length; j += 1) {
              var el = this[j];
              var evt = void 0;
              try {
                evt = new win$1.CustomEvent(event, {
                  detail: eventData,
                  bubbles: true,
                  cancelable: true
                });
              } catch (e) {
                evt = doc$1.createEvent('Event');
                evt.initEvent(event, true, true);
                evt.detail = eventData;
              }
              // eslint-disable-next-line
              el.dom7EventData = args.filter(function (data, dataIndex) {
                return dataIndex > 0;
              });
              el.dispatchEvent(evt);
              el.dom7EventData = [];
              delete el.dom7EventData;
            }
          }
          return this;
        }
        function transitionEnd$1(callback) {
          var events = ['webkitTransitionEnd', 'transitionend'];
          var dom = this;
          var i;
          function fireCallBack(e) {
            /* jshint validthis:true */
            if (e.target !== this) return;
            callback.call(this, e);
            for (i = 0; i < events.length; i += 1) {
              dom.off(events[i], fireCallBack);
            }
          }
          if (callback) {
            for (i = 0; i < events.length; i += 1) {
              dom.on(events[i], fireCallBack);
            }
          }
          return this;
        }
        function outerWidth(includeMargins) {
          if (this.length > 0) {
            if (includeMargins) {
              // eslint-disable-next-line
              var _styles = this.styles();
              return this[0].offsetWidth + parseFloat(_styles.getPropertyValue('margin-right')) + parseFloat(_styles.getPropertyValue('margin-left'));
            }
            return this[0].offsetWidth;
          }
          return null;
        }
        function outerHeight(includeMargins) {
          if (this.length > 0) {
            if (includeMargins) {
              // eslint-disable-next-line
              var _styles2 = this.styles();
              return this[0].offsetHeight + parseFloat(_styles2.getPropertyValue('margin-top')) + parseFloat(_styles2.getPropertyValue('margin-bottom'));
            }
            return this[0].offsetHeight;
          }
          return null;
        }
        function offset() {
          if (this.length > 0) {
            var el = this[0];
            var box = el.getBoundingClientRect();
            var body = doc$1.body;
            var clientTop = el.clientTop || body.clientTop || 0;
            var clientLeft = el.clientLeft || body.clientLeft || 0;
            var scrollTop = el === win$1 ? win$1.scrollY : el.scrollTop;
            var scrollLeft = el === win$1 ? win$1.scrollX : el.scrollLeft;
            return {
              top: box.top + scrollTop - clientTop,
              left: box.left + scrollLeft - clientLeft
            };
          }
          return null;
        }
        function styles() {
          if (this[0]) return win$1.getComputedStyle(this[0], null);
          return {};
        }
        function css(props, value) {
          var i;
          if (arguments.length === 1) {
            if (typeof props === 'string') {
              if (this[0]) return win$1.getComputedStyle(this[0], null).getPropertyValue(props);
            } else {
              for (i = 0; i < this.length; i += 1) {
                // eslint-disable-next-line
                for (var prop in props) {
                  this[i].style[prop] = props[prop];
                }
              }
              return this;
            }
          }
          if (arguments.length === 2 && typeof props === 'string') {
            for (i = 0; i < this.length; i += 1) {
              this[i].style[props] = value;
            }
            return this;
          }
          return this;
        }
        // Iterate over the collection passing elements to `callback`
        function each(callback) {
          // Don't bother continuing without a callback
          if (!callback) return this;
          // Iterate over the current collection
          for (var i = 0; i < this.length; i += 1) {
            // If the callback returns false
            if (callback.call(this[i], i, this[i]) === false) {
              // End the loop early
              return this;
            }
          }
          // Return `this` to allow chained DOM operations
          return this;
        }
        // eslint-disable-next-line
        function html(html) {
          if (typeof html === 'undefined') {
            return this[0] ? this[0].innerHTML : undefined;
          }
          for (var i = 0; i < this.length; i += 1) {
            this[i].innerHTML = html;
          }
          return this;
        }
        // eslint-disable-next-line
        function text(text) {
          if (typeof text === 'undefined') {
            if (this[0]) {
              return this[0].textContent.trim();
            }
            return null;
          }
          for (var i = 0; i < this.length; i += 1) {
            this[i].textContent = text;
          }
          return this;
        }
        function is(selector) {
          var el = this[0];
          var compareWith;
          var i;
          if (!el || typeof selector === 'undefined') return false;
          if (typeof selector === 'string') {
            if (el.matches) return el.matches(selector);else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector);else if (el.msMatchesSelector) return el.msMatchesSelector(selector);
            compareWith = $(selector);
            for (i = 0; i < compareWith.length; i += 1) {
              if (compareWith[i] === el) return true;
            }
            return false;
          } else if (selector === doc$1) return el === doc$1;else if (selector === win$1) return el === win$1;
          if (selector.nodeType || selector instanceof Dom7) {
            compareWith = selector.nodeType ? [selector] : selector;
            for (i = 0; i < compareWith.length; i += 1) {
              if (compareWith[i] === el) return true;
            }
            return false;
          }
          return false;
        }
        function index() {
          var child = this[0];
          var i;
          if (child) {
            i = 0;
            // eslint-disable-next-line
            while ((child = child.previousSibling) !== null) {
              if (child.nodeType === 1) i += 1;
            }
            return i;
          }
          return undefined;
        }
        // eslint-disable-next-line
        function eq$1(index) {
          if (typeof index === 'undefined') return this;
          var length = this.length;
          var returnIndex;
          if (index > length - 1) {
            return new Dom7([]);
          }
          if (index < 0) {
            returnIndex = length + index;
            if (returnIndex < 0) return new Dom7([]);
            return new Dom7([this[returnIndex]]);
          }
          return new Dom7([this[index]]);
        }
        function append() {
          var newChild;
          for (var k = 0; k < arguments.length; k += 1) {
            newChild = k < 0 || arguments.length <= k ? undefined : arguments[k];
            for (var i = 0; i < this.length; i += 1) {
              if (typeof newChild === 'string') {
                var tempDiv = doc$1.createElement('div');
                tempDiv.innerHTML = newChild;
                while (tempDiv.firstChild) {
                  this[i].appendChild(tempDiv.firstChild);
                }
              } else if (newChild instanceof Dom7) {
                for (var j = 0; j < newChild.length; j += 1) {
                  this[i].appendChild(newChild[j]);
                }
              } else {
                this[i].appendChild(newChild);
              }
            }
          }
          return this;
        }
        function prepend(newChild) {
          var i;
          var j;
          for (i = 0; i < this.length; i += 1) {
            if (typeof newChild === 'string') {
              var tempDiv = doc$1.createElement('div');
              tempDiv.innerHTML = newChild;
              for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) {
                this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]);
              }
            } else if (newChild instanceof Dom7) {
              for (j = 0; j < newChild.length; j += 1) {
                this[i].insertBefore(newChild[j], this[i].childNodes[0]);
              }
            } else {
              this[i].insertBefore(newChild, this[i].childNodes[0]);
            }
          }
          return this;
        }
        function next(selector) {
          if (this.length > 0) {
            if (selector) {
              if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) {
                return new Dom7([this[0].nextElementSibling]);
              }
              return new Dom7([]);
            }
            if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]);
            return new Dom7([]);
          }
          return new Dom7([]);
        }
        function nextAll(selector) {
          var nextEls = [];
          var el = this[0];
          if (!el) return new Dom7([]);
          while (el.nextElementSibling) {
            var _next = el.nextElementSibling; // eslint-disable-line
            if (selector) {
              if ($(_next).is(selector)) nextEls.push(_next);
            } else nextEls.push(_next);
            el = _next;
          }
          return new Dom7(nextEls);
        }
        function prev(selector) {
          if (this.length > 0) {
            var el = this[0];
            if (selector) {
              if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) {
                return new Dom7([el.previousElementSibling]);
              }
              return new Dom7([]);
            }
            if (el.previousElementSibling) return new Dom7([el.previousElementSibling]);
            return new Dom7([]);
          }
          return new Dom7([]);
        }
        function prevAll(selector) {
          var prevEls = [];
          var el = this[0];
          if (!el) return new Dom7([]);
          while (el.previousElementSibling) {
            var _prev = el.previousElementSibling; // eslint-disable-line
            if (selector) {
              if ($(_prev).is(selector)) prevEls.push(_prev);
            } else prevEls.push(_prev);
            el = _prev;
          }
          return new Dom7(prevEls);
        }
        function parent(selector) {
          var parents = []; // eslint-disable-line
          for (var i = 0; i < this.length; i += 1) {
            if (this[i].parentNode !== null) {
              if (selector) {
                if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode);
              } else {
                parents.push(this[i].parentNode);
              }
            }
          }
          return $(unique(parents));
        }
        function parents(selector) {
          var parents = []; // eslint-disable-line
          for (var i = 0; i < this.length; i += 1) {
            var _parent = this[i].parentNode; // eslint-disable-line
            while (_parent) {
              if (selector) {
                if ($(_parent).is(selector)) parents.push(_parent);
              } else {
                parents.push(_parent);
              }
              _parent = _parent.parentNode;
            }
          }
          return $(unique(parents));
        }
        function closest(selector) {
          var closest = this; // eslint-disable-line
          if (typeof selector === 'undefined') {
            return new Dom7([]);
          }
          if (!closest.is(selector)) {
            closest = closest.parents(selector).eq(0);
          }
          return closest;
        }
        function find(selector) {
          var foundElements = [];
          for (var i = 0; i < this.length; i += 1) {
            var found = this[i].querySelectorAll(selector);
            for (var j = 0; j < found.length; j += 1) {
              foundElements.push(found[j]);
            }
          }
          return new Dom7(foundElements);
        }
        function children(selector) {
          var children = []; // eslint-disable-line
          for (var i = 0; i < this.length; i += 1) {
            var childNodes = this[i].childNodes;
            for (var j = 0; j < childNodes.length; j += 1) {
              if (!selector) {
                if (childNodes[j].nodeType === 1) children.push(childNodes[j]);
              } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) {
                children.push(childNodes[j]);
              }
            }
          }
          return new Dom7(unique(children));
        }
        function remove() {
          for (var i = 0; i < this.length; i += 1) {
            if (this[i].parentNode) this[i].parentNode.removeChild(this[i]);
          }
          return this;
        }
        function add() {
          var dom = this;
          var i;
          var j;
          for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
            args[_key4] = arguments[_key4];
          }
          for (i = 0; i < args.length; i += 1) {
            var toAdd = $(args[i]);
            for (j = 0; j < toAdd.length; j += 1) {
              dom[dom.length] = toAdd[j];
              dom.length += 1;
            }
          }
          return dom;
        }

        /**
         * SSR Window 1.0.1
         * Better handling for window object in SSR environment
         * https://github.com/nolimits4web/ssr-window
         *
         * Copyright 2018, Vladimir Kharlampidi
         *
         * Licensed under MIT
         *
         * Released on: July 18, 2018
         */
        var doc = typeof document === 'undefined' ? {
          body: {},
          addEventListener: function addEventListener() {},
          removeEventListener: function removeEventListener() {},
          activeElement: {
            blur: function blur() {},
            nodeName: ''
          },
          querySelector: function querySelector() {
            return null;
          },
          querySelectorAll: function querySelectorAll() {
            return [];
          },
          getElementById: function getElementById() {
            return null;
          },
          createEvent: function createEvent() {
            return {
              initEvent: function initEvent() {}
            };
          },
          createElement: function createElement() {
            return {
              children: [],
              childNodes: [],
              style: {},
              setAttribute: function setAttribute() {},
              getElementsByTagName: function getElementsByTagName() {
                return [];
              }
            };
          },
          location: {
            hash: ''
          }
        } : document; // eslint-disable-line

        var win = typeof window === 'undefined' ? {
          document: doc,
          navigator: {
            userAgent: ''
          },
          location: {},
          history: {},
          CustomEvent: function CustomEvent() {
            return this;
          },
          addEventListener: function addEventListener() {},
          removeEventListener: function removeEventListener() {},
          getComputedStyle: function getComputedStyle() {
            return {
              getPropertyValue: function getPropertyValue() {
                return '';
              }
            };
          },
          Image: function Image() {},
          Date: function Date() {},
          screen: {},
          setTimeout: function setTimeout() {},
          clearTimeout: function clearTimeout() {}
        } : window; // eslint-disable-line

        /**
         * Swiper 4.5.1
         * Most modern mobile touch slider and framework with hardware accelerated transitions
         * http://www.idangero.us/swiper/
         *
         * Copyright 2014-2019 Vladimir Kharlampidi
         *
         * Released under the MIT License
         *
         * Released on: September 13, 2019
         */

        var Methods = {
          addClass: addClass,
          removeClass: removeClass,
          hasClass: hasClass,
          toggleClass: toggleClass,
          attr: attr,
          removeAttr: removeAttr,
          data: data,
          transform: transform,
          transition: transition$1,
          on: on,
          off: off,
          trigger: trigger,
          transitionEnd: transitionEnd$1,
          outerWidth: outerWidth,
          outerHeight: outerHeight,
          offset: offset,
          css: css,
          each: each,
          html: html,
          text: text,
          is: is,
          index: index,
          eq: eq$1,
          append: append,
          prepend: prepend,
          next: next,
          nextAll: nextAll,
          prev: prev,
          prevAll: prevAll,
          parent: parent,
          parents: parents,
          closest: closest,
          find: find,
          children: children,
          remove: remove,
          add: add,
          styles: styles
        };
        Object.keys(Methods).forEach(function (methodName) {
          $.fn[methodName] = $.fn[methodName] || Methods[methodName];
        });
        var Utils = {
          deleteProps: function deleteProps(obj) {
            var object = obj;
            Object.keys(object).forEach(function (key) {
              try {
                object[key] = null;
              } catch (e) {
                // no getter for object
              }
              try {
                delete object[key];
              } catch (e) {
                // something got wrong
              }
            });
          },
          nextTick: function nextTick(callback) {
            var delay = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
            return setTimeout(callback, delay);
          },
          now: function now() {
            return Date.now();
          },
          getTranslate: function getTranslate(el) {
            var axis = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'x';
            var matrix;
            var curTransform;
            var transformMatrix;
            var curStyle = win.getComputedStyle(el, null);
            if (win.WebKitCSSMatrix) {
              curTransform = curStyle.transform || curStyle.webkitTransform;
              if (curTransform.split(',').length > 6) {
                curTransform = curTransform.split(', ').map(function (a) {
                  return a.replace(',', '.');
                }).join(', ');
              }
              // Some old versions of Webkit choke when 'none' is passed; pass
              // empty string instead in this case
              transformMatrix = new win.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
            } else {
              transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
              matrix = transformMatrix.toString().split(',');
            }
            if (axis === 'x') {
              // Latest Chrome and webkits Fix
              if (win.WebKitCSSMatrix) curTransform = transformMatrix.m41;
              // Crazy IE10 Matrix
              else if (matrix.length === 16) curTransform = parseFloat(matrix[12]);
              // Normal Browsers
              else curTransform = parseFloat(matrix[4]);
            }
            if (axis === 'y') {
              // Latest Chrome and webkits Fix
              if (win.WebKitCSSMatrix) curTransform = transformMatrix.m42;
              // Crazy IE10 Matrix
              else if (matrix.length === 16) curTransform = parseFloat(matrix[13]);
              // Normal Browsers
              else curTransform = parseFloat(matrix[5]);
            }
            return curTransform || 0;
          },
          parseUrlQuery: function parseUrlQuery(url) {
            var query = {};
            var urlToParse = url || win.location.href;
            var i;
            var params;
            var param;
            var length;
            if (typeof urlToParse === 'string' && urlToParse.length) {
              urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : '';
              params = urlToParse.split('&').filter(function (paramsPart) {
                return paramsPart !== '';
              });
              length = params.length;
              for (i = 0; i < length; i += 1) {
                param = params[i].replace(/#\S+/g, '').split('=');
                query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || '';
              }
            }
            return query;
          },
          isObject: function isObject(o) {
            return _typeof(o) === 'object' && o !== null && o.constructor && o.constructor === Object;
          },
          extend: function extend() {
            var to = Object(arguments.length <= 0 ? undefined : arguments[0]);
            for (var i = 1; i < arguments.length; i += 1) {
              var nextSource = i < 0 || arguments.length <= i ? undefined : arguments[i];
              if (nextSource !== undefined && nextSource !== null) {
                var keysArray = Object.keys(Object(nextSource));
                for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
                  var nextKey = keysArray[nextIndex];
                  var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
                  if (desc !== undefined && desc.enumerable) {
                    if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
                      Utils.extend(to[nextKey], nextSource[nextKey]);
                    } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) {
                      to[nextKey] = {};
                      Utils.extend(to[nextKey], nextSource[nextKey]);
                    } else {
                      to[nextKey] = nextSource[nextKey];
                    }
                  }
                }
              }
            }
            return to;
          }
        };
        var Support = function Support() {
          var testDiv = doc.createElement('div');
          return {
            touch: win.Modernizr && win.Modernizr.touch === true || function checkTouch() {
              return !!(win.navigator.maxTouchPoints > 0 || 'ontouchstart' in win || win.DocumentTouch && doc instanceof win.DocumentTouch);
            }(),
            pointerEvents: !!(win.navigator.pointerEnabled || win.PointerEvent || 'maxTouchPoints' in win.navigator && win.navigator.maxTouchPoints > 0),
            prefixedPointerEvents: !!win.navigator.msPointerEnabled,
            transition: function checkTransition() {
              var style = testDiv.style;
              return 'transition' in style || 'webkitTransition' in style || 'MozTransition' in style;
            }(),
            transforms3d: win.Modernizr && win.Modernizr.csstransforms3d === true || function checkTransforms3d() {
              var style = testDiv.style;
              return 'webkitPerspective' in style || 'MozPerspective' in style || 'OPerspective' in style || 'MsPerspective' in style || 'perspective' in style;
            }(),
            flexbox: function checkFlexbox() {
              var style = testDiv.style;
              var styles = 'alignItems webkitAlignItems webkitBoxAlign msFlexAlign mozBoxAlign webkitFlexDirection msFlexDirection mozBoxDirection mozBoxOrient webkitBoxDirection webkitBoxOrient'.split(' ');
              for (var i = 0; i < styles.length; i += 1) {
                if (styles[i] in style) return true;
              }
              return false;
            }(),
            observer: function checkObserver() {
              return 'MutationObserver' in win || 'WebkitMutationObserver' in win;
            }(),
            passiveListener: function checkPassiveListener() {
              var supportsPassive = false;
              try {
                var opts = Object.defineProperty({}, 'passive', {
                  // eslint-disable-next-line
                  get: function get() {
                    supportsPassive = true;
                  }
                });
                win.addEventListener('testPassiveListener', null, opts);
              } catch (e) {
                // No support
              }
              return supportsPassive;
            }(),
            gestures: function checkGestures() {
              return 'ongesturestart' in win;
            }()
          };
        }();
        var Browser = function Browser() {
          function isSafari() {
            var ua = win.navigator.userAgent.toLowerCase();
            return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;
          }
          return {
            isIE: !!win.navigator.userAgent.match(/Trident/g) || !!win.navigator.userAgent.match(/MSIE/g),
            isEdge: !!win.navigator.userAgent.match(/Edge/g),
            isSafari: isSafari(),
            isUiWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(win.navigator.userAgent)
          };
        }();
        var SwiperClass = /*#__PURE__*/function () {
          function SwiperClass() {
            var params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
            _classCallCheck(this, SwiperClass);
            var self = this;
            self.params = params;

            // Events
            self.eventsListeners = {};
            if (self.params && self.params.on) {
              Object.keys(self.params.on).forEach(function (eventName) {
                self.on(eventName, self.params.on[eventName]);
              });
            }
          }
          _createClass(SwiperClass, [{
            key: "on",
            value: function on(events, handler, priority) {
              var self = this;
              if (typeof handler !== 'function') return self;
              var method = priority ? 'unshift' : 'push';
              events.split(' ').forEach(function (event) {
                if (!self.eventsListeners[event]) self.eventsListeners[event] = [];
                self.eventsListeners[event][method](handler);
              });
              return self;
            }
          }, {
            key: "once",
            value: function once(events, handler, priority) {
              var self = this;
              if (typeof handler !== 'function') return self;
              function onceHandler() {
                for (var _len5 = arguments.length, args = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
                  args[_key5] = arguments[_key5];
                }
                handler.apply(self, args);
                self.off(events, onceHandler);
                if (onceHandler.f7proxy) {
                  delete onceHandler.f7proxy;
                }
              }
              onceHandler.f7proxy = handler;
              return self.on(events, onceHandler, priority);
            }
          }, {
            key: "off",
            value: function off(events, handler) {
              var self = this;
              if (!self.eventsListeners) return self;
              events.split(' ').forEach(function (event) {
                if (typeof handler === 'undefined') {
                  self.eventsListeners[event] = [];
                } else if (self.eventsListeners[event] && self.eventsListeners[event].length) {
                  self.eventsListeners[event].forEach(function (eventHandler, index) {
                    if (eventHandler === handler || eventHandler.f7proxy && eventHandler.f7proxy === handler) {
                      self.eventsListeners[event].splice(index, 1);
                    }
                  });
                }
              });
              return self;
            }
          }, {
            key: "emit",
            value: function emit() {
              var self = this;
              if (!self.eventsListeners) return self;
              var events;
              var data;
              var context;
              for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
                args[_key6] = arguments[_key6];
              }
              if (typeof args[0] === 'string' || Array.isArray(args[0])) {
                events = args[0];
                data = args.slice(1, args.length);
                context = self;
              } else {
                events = args[0].events;
                data = args[0].data;
                context = args[0].context || self;
              }
              var eventsArray = Array.isArray(events) ? events : events.split(' ');
              eventsArray.forEach(function (event) {
                if (self.eventsListeners && self.eventsListeners[event]) {
                  var handlers = [];
                  self.eventsListeners[event].forEach(function (eventHandler) {
                    handlers.push(eventHandler);
                  });
                  handlers.forEach(function (eventHandler) {
                    eventHandler.apply(context, data);
                  });
                }
              });
              return self;
            }
          }, {
            key: "useModulesParams",
            value: function useModulesParams(instanceParams) {
              var instance = this;
              if (!instance.modules) return;
              Object.keys(instance.modules).forEach(function (moduleName) {
                var module = instance.modules[moduleName];
                // Extend params
                if (module.params) {
                  Utils.extend(instanceParams, module.params);
                }
              });
            }
          }, {
            key: "useModules",
            value: function useModules() {
              var modulesParams = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
              var instance = this;
              if (!instance.modules) return;
              Object.keys(instance.modules).forEach(function (moduleName) {
                var module = instance.modules[moduleName];
                var moduleParams = modulesParams[moduleName] || {};
                // Extend instance methods and props
                if (module.instance) {
                  Object.keys(module.instance).forEach(function (modulePropName) {
                    var moduleProp = module.instance[modulePropName];
                    if (typeof moduleProp === 'function') {
                      instance[modulePropName] = moduleProp.bind(instance);
                    } else {
                      instance[modulePropName] = moduleProp;
                    }
                  });
                }
                // Add event listeners
                if (module.on && instance.on) {
                  Object.keys(module.on).forEach(function (moduleEventName) {
                    instance.on(moduleEventName, module.on[moduleEventName]);
                  });
                }

                // Module create callback
                if (module.create) {
                  module.create.bind(instance)(moduleParams);
                }
              });
            }
          }], [{
            key: "components",
            set: function set(components) {
              var Class = this;
              if (!Class.use) return;
              Class.use(components);
            }
          }, {
            key: "installModule",
            value: function installModule(module) {
              var Class = this;
              if (!Class.prototype.modules) Class.prototype.modules = {};
              var name = module.name || "".concat(Object.keys(Class.prototype.modules).length, "_").concat(Utils.now());
              Class.prototype.modules[name] = module;
              // Prototype
              if (module.proto) {
                Object.keys(module.proto).forEach(function (key) {
                  Class.prototype[key] = module.proto[key];
                });
              }
              // Class
              if (module.static) {
                Object.keys(module.static).forEach(function (key) {
                  Class[key] = module.static[key];
                });
              }
              // Callback
              if (module.install) {
                for (var _len7 = arguments.length, params = new Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {
                  params[_key7 - 1] = arguments[_key7];
                }
                module.install.apply(Class, params);
              }
              return Class;
            }
          }, {
            key: "use",
            value: function use(module) {
              var Class = this;
              if (Array.isArray(module)) {
                module.forEach(function (m) {
                  return Class.installModule(m);
                });
                return Class;
              }
              for (var _len8 = arguments.length, params = new Array(_len8 > 1 ? _len8 - 1 : 0), _key8 = 1; _key8 < _len8; _key8++) {
                params[_key8 - 1] = arguments[_key8];
              }
              return Class.installModule.apply(Class, [module].concat(params));
            }
          }]);
          return SwiperClass;
        }();
        function updateSize() {
          var swiper = this;
          var width;
          var height;
          var $el = swiper.$el;
          if (typeof swiper.params.width !== 'undefined') {
            width = swiper.params.width;
          } else {
            width = $el[0].clientWidth;
          }
          if (typeof swiper.params.height !== 'undefined') {
            height = swiper.params.height;
          } else {
            height = $el[0].clientHeight;
          }
          if (width === 0 && swiper.isHorizontal() || height === 0 && swiper.isVertical()) {
            return;
          }

          // Subtract paddings
          width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10);
          height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10);
          Utils.extend(swiper, {
            width: width,
            height: height,
            size: swiper.isHorizontal() ? width : height
          });
        }
        function updateSlides() {
          var swiper = this;
          var params = swiper.params;
          var $wrapperEl = swiper.$wrapperEl,
            swiperSize = swiper.size,
            rtl = swiper.rtlTranslate,
            wrongRTL = swiper.wrongRTL;
          var isVirtual = swiper.virtual && params.virtual.enabled;
          var previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length;
          var slides = $wrapperEl.children(".".concat(swiper.params.slideClass));
          var slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length;
          var snapGrid = [];
          var slidesGrid = [];
          var slidesSizesGrid = [];
          var offsetBefore = params.slidesOffsetBefore;
          if (typeof offsetBefore === 'function') {
            offsetBefore = params.slidesOffsetBefore.call(swiper);
          }
          var offsetAfter = params.slidesOffsetAfter;
          if (typeof offsetAfter === 'function') {
            offsetAfter = params.slidesOffsetAfter.call(swiper);
          }
          var previousSnapGridLength = swiper.snapGrid.length;
          var previousSlidesGridLength = swiper.snapGrid.length;
          var spaceBetween = params.spaceBetween;
          var slidePosition = -offsetBefore;
          var prevSlideSize = 0;
          var index = 0;
          if (typeof swiperSize === 'undefined') {
            return;
          }
          if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) {
            spaceBetween = parseFloat(spaceBetween.replace('%', '')) / 100 * swiperSize;
          }
          swiper.virtualSize = -spaceBetween;

          // reset margins
          if (rtl) slides.css({
            marginLeft: '',
            marginTop: ''
          });else slides.css({
            marginRight: '',
            marginBottom: ''
          });
          var slidesNumberEvenToRows;
          if (params.slidesPerColumn > 1) {
            if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) {
              slidesNumberEvenToRows = slidesLength;
            } else {
              slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn;
            }
            if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') {
              slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn);
            }
          }

          // Calc slides
          var slideSize;
          var slidesPerColumn = params.slidesPerColumn;
          var slidesPerRow = slidesNumberEvenToRows / slidesPerColumn;
          var numFullColumns = Math.floor(slidesLength / params.slidesPerColumn);
          for (var i = 0; i < slidesLength; i += 1) {
            slideSize = 0;
            var _slide = slides.eq(i);
            if (params.slidesPerColumn > 1) {
              // Set slides order
              var newSlideOrderIndex = void 0;
              var column = void 0;
              var row = void 0;
              if (params.slidesPerColumnFill === 'column' || params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) {
                if (params.slidesPerColumnFill === 'column') {
                  column = Math.floor(i / slidesPerColumn);
                  row = i - column * slidesPerColumn;
                  if (column > numFullColumns || column === numFullColumns && row === slidesPerColumn - 1) {
                    row += 1;
                    if (row >= slidesPerColumn) {
                      row = 0;
                      column += 1;
                    }
                  }
                } else {
                  var groupIndex = Math.floor(i / params.slidesPerGroup);
                  row = Math.floor(i / params.slidesPerView) - groupIndex * params.slidesPerColumn;
                  column = i - row * params.slidesPerView - groupIndex * params.slidesPerView;
                }
                newSlideOrderIndex = column + row * slidesNumberEvenToRows / slidesPerColumn;
                _slide.css({
                  '-webkit-box-ordinal-group': newSlideOrderIndex,
                  '-moz-box-ordinal-group': newSlideOrderIndex,
                  '-ms-flex-order': newSlideOrderIndex,
                  '-webkit-order': newSlideOrderIndex,
                  order: newSlideOrderIndex
                });
              } else {
                row = Math.floor(i / slidesPerRow);
                column = i - row * slidesPerRow;
              }
              _slide.css("margin-".concat(swiper.isHorizontal() ? 'top' : 'left'), row !== 0 && params.spaceBetween && "".concat(params.spaceBetween, "px")).attr('data-swiper-column', column).attr('data-swiper-row', row);
            }
            if (_slide.css('display') === 'none') continue; // eslint-disable-line

            if (params.slidesPerView === 'auto') {
              var slideStyles = win.getComputedStyle(_slide[0], null);
              var currentTransform = _slide[0].style.transform;
              var currentWebKitTransform = _slide[0].style.webkitTransform;
              if (currentTransform) {
                _slide[0].style.transform = 'none';
              }
              if (currentWebKitTransform) {
                _slide[0].style.webkitTransform = 'none';
              }
              if (params.roundLengths) {
                slideSize = swiper.isHorizontal() ? _slide.outerWidth(true) : _slide.outerHeight(true);
              } else {
                // eslint-disable-next-line
                if (swiper.isHorizontal()) {
                  var width = parseFloat(slideStyles.getPropertyValue('width'));
                  var paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left'));
                  var paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right'));
                  var marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left'));
                  var marginRight = parseFloat(slideStyles.getPropertyValue('margin-right'));
                  var boxSizing = slideStyles.getPropertyValue('box-sizing');
                  if (boxSizing && boxSizing === 'border-box' && !Browser.isIE) {
                    slideSize = width + marginLeft + marginRight;
                  } else {
                    slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight;
                  }
                } else {
                  var height = parseFloat(slideStyles.getPropertyValue('height'));
                  var paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top'));
                  var paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom'));
                  var marginTop = parseFloat(slideStyles.getPropertyValue('margin-top'));
                  var marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom'));
                  var _boxSizing = slideStyles.getPropertyValue('box-sizing');
                  if (_boxSizing && _boxSizing === 'border-box' && !Browser.isIE) {
                    slideSize = height + marginTop + marginBottom;
                  } else {
                    slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom;
                  }
                }
              }
              if (currentTransform) {
                _slide[0].style.transform = currentTransform;
              }
              if (currentWebKitTransform) {
                _slide[0].style.webkitTransform = currentWebKitTransform;
              }
              if (params.roundLengths) slideSize = Math.floor(slideSize);
            } else {
              slideSize = (swiperSize - (params.slidesPerView - 1) * spaceBetween) / params.slidesPerView;
              if (params.roundLengths) slideSize = Math.floor(slideSize);
              if (slides[i]) {
                if (swiper.isHorizontal()) {
                  slides[i].style.width = "".concat(slideSize, "px");
                } else {
                  slides[i].style.height = "".concat(slideSize, "px");
                }
              }
            }
            if (slides[i]) {
              slides[i].swiperSlideSize = slideSize;
            }
            slidesSizesGrid.push(slideSize);
            if (params.centeredSlides) {
              slidePosition = slidePosition + slideSize / 2 + prevSlideSize / 2 + spaceBetween;
              if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
              if (i === 0) slidePosition = slidePosition - swiperSize / 2 - spaceBetween;
              if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0;
              if (params.roundLengths) slidePosition = Math.floor(slidePosition);
              if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
              slidesGrid.push(slidePosition);
            } else {
              if (params.roundLengths) slidePosition = Math.floor(slidePosition);
              if (index % params.slidesPerGroup === 0) snapGrid.push(slidePosition);
              slidesGrid.push(slidePosition);
              slidePosition = slidePosition + slideSize + spaceBetween;
            }
            swiper.virtualSize += slideSize + spaceBetween;
            prevSlideSize = slideSize;
            index += 1;
          }
          swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter;
          var newSlidesGrid;
          if (rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) {
            $wrapperEl.css({
              width: "".concat(swiper.virtualSize + params.spaceBetween, "px")
            });
          }
          if (!Support.flexbox || params.setWrapperSize) {
            if (swiper.isHorizontal()) $wrapperEl.css({
              width: "".concat(swiper.virtualSize + params.spaceBetween, "px")
            });else $wrapperEl.css({
              height: "".concat(swiper.virtualSize + params.spaceBetween, "px")
            });
          }
          if (params.slidesPerColumn > 1) {
            swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows;
            swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween;
            if (swiper.isHorizontal()) $wrapperEl.css({
              width: "".concat(swiper.virtualSize + params.spaceBetween, "px")
            });else $wrapperEl.css({
              height: "".concat(swiper.virtualSize + params.spaceBetween, "px")
            });
            if (params.centeredSlides) {
              newSlidesGrid = [];
              for (var _i = 0; _i < snapGrid.length; _i += 1) {
                var slidesGridItem = snapGrid[_i];
                if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem);
                if (snapGrid[_i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem);
              }
              snapGrid = newSlidesGrid;
            }
          }

          // Remove last grid elements depending on width
          if (!params.centeredSlides) {
            newSlidesGrid = [];
            for (var _i2 = 0; _i2 < snapGrid.length; _i2 += 1) {
              var _slidesGridItem = snapGrid[_i2];
              if (params.roundLengths) _slidesGridItem = Math.floor(_slidesGridItem);
              if (snapGrid[_i2] <= swiper.virtualSize - swiperSize) {
                newSlidesGrid.push(_slidesGridItem);
              }
            }
            snapGrid = newSlidesGrid;
            if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) {
              snapGrid.push(swiper.virtualSize - swiperSize);
            }
          }
          if (snapGrid.length === 0) snapGrid = [0];
          if (params.spaceBetween !== 0) {
            if (swiper.isHorizontal()) {
              if (rtl) slides.css({
                marginLeft: "".concat(spaceBetween, "px")
              });else slides.css({
                marginRight: "".concat(spaceBetween, "px")
              });
            } else slides.css({
              marginBottom: "".concat(spaceBetween, "px")
            });
          }
          if (params.centerInsufficientSlides) {
            var allSlidesSize = 0;
            slidesSizesGrid.forEach(function (slideSizeValue) {
              allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0);
            });
            allSlidesSize -= params.spaceBetween;
            if (allSlidesSize < swiperSize) {
              var allSlidesOffset = (swiperSize - allSlidesSize) / 2;
              snapGrid.forEach(function (snap, snapIndex) {
                snapGrid[snapIndex] = snap - allSlidesOffset;
              });
              slidesGrid.forEach(function (snap, snapIndex) {
                slidesGrid[snapIndex] = snap + allSlidesOffset;
              });
            }
          }
          Utils.extend(swiper, {
            slides: slides,
            snapGrid: snapGrid,
            slidesGrid: slidesGrid,
            slidesSizesGrid: slidesSizesGrid
          });
          if (slidesLength !== previousSlidesLength) {
            swiper.emit('slidesLengthChange');
          }
          if (snapGrid.length !== previousSnapGridLength) {
            if (swiper.params.watchOverflow) swiper.checkOverflow();
            swiper.emit('snapGridLengthChange');
          }
          if (slidesGrid.length !== previousSlidesGridLength) {
            swiper.emit('slidesGridLengthChange');
          }
          if (params.watchSlidesProgress || params.watchSlidesVisibility) {
            swiper.updateSlidesOffset();
          }
        }
        function updateAutoHeight(speed) {
          var swiper = this;
          var activeSlides = [];
          var newHeight = 0;
          var i;
          if (typeof speed === 'number') {
            swiper.setTransition(speed);
          } else if (speed === true) {
            swiper.setTransition(swiper.params.speed);
          }
          // Find slides currently in view
          if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) {
            for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) {
              var _index = swiper.activeIndex + i;
              if (_index > swiper.slides.length) break;
              activeSlides.push(swiper.slides.eq(_index)[0]);
            }
          } else {
            activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]);
          }

          // Find new height from highest slide in view
          for (i = 0; i < activeSlides.length; i += 1) {
            if (typeof activeSlides[i] !== 'undefined') {
              var height = activeSlides[i].offsetHeight;
              newHeight = height > newHeight ? height : newHeight;
            }
          }

          // Update Height
          if (newHeight) swiper.$wrapperEl.css('height', "".concat(newHeight, "px"));
        }
        function updateSlidesOffset() {
          var swiper = this;
          var slides = swiper.slides;
          for (var i = 0; i < slides.length; i += 1) {
            slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop;
          }
        }
        function updateSlidesProgress() {
          var translate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this && this.translate || 0;
          var swiper = this;
          var params = swiper.params;
          var slides = swiper.slides,
            rtl = swiper.rtlTranslate;
          if (slides.length === 0) return;
          if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset();
          var offsetCenter = -translate;
          if (rtl) offsetCenter = translate;

          // Visible Slides
          slides.removeClass(params.slideVisibleClass);
          swiper.visibleSlidesIndexes = [];
          swiper.visibleSlides = [];
          for (var i = 0; i < slides.length; i += 1) {
            var _slide2 = slides[i];
            var slideProgress = (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0) - _slide2.swiperSlideOffset) / (_slide2.swiperSlideSize + params.spaceBetween);
            if (params.watchSlidesVisibility) {
              var slideBefore = -(offsetCenter - _slide2.swiperSlideOffset);
              var slideAfter = slideBefore + swiper.slidesSizesGrid[i];
              var isVisible = slideBefore >= 0 && slideBefore < swiper.size - 1 || slideAfter > 1 && slideAfter <= swiper.size || slideBefore <= 0 && slideAfter >= swiper.size;
              if (isVisible) {
                swiper.visibleSlides.push(_slide2);
                swiper.visibleSlidesIndexes.push(i);
                slides.eq(i).addClass(params.slideVisibleClass);
              }
            }
            _slide2.progress = rtl ? -slideProgress : slideProgress;
          }
          swiper.visibleSlides = $(swiper.visibleSlides);
        }
        function updateProgress() {
          var translate = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this && this.translate || 0;
          var swiper = this;
          var params = swiper.params;
          var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
          var progress = swiper.progress,
            isBeginning = swiper.isBeginning,
            isEnd = swiper.isEnd;
          var wasBeginning = isBeginning;
          var wasEnd = isEnd;
          if (translatesDiff === 0) {
            progress = 0;
            isBeginning = true;
            isEnd = true;
          } else {
            progress = (translate - swiper.minTranslate()) / translatesDiff;
            isBeginning = progress <= 0;
            isEnd = progress >= 1;
          }
          Utils.extend(swiper, {
            progress: progress,
            isBeginning: isBeginning,
            isEnd: isEnd
          });
          if (params.watchSlidesProgress || params.watchSlidesVisibility) swiper.updateSlidesProgress(translate);
          if (isBeginning && !wasBeginning) {
            swiper.emit('reachBeginning toEdge');
          }
          if (isEnd && !wasEnd) {
            swiper.emit('reachEnd toEdge');
          }
          if (wasBeginning && !isBeginning || wasEnd && !isEnd) {
            swiper.emit('fromEdge');
          }
          swiper.emit('progress', progress);
        }
        function updateSlidesClasses() {
          var swiper = this;
          var slides = swiper.slides,
            params = swiper.params,
            $wrapperEl = swiper.$wrapperEl,
            activeIndex = swiper.activeIndex,
            realIndex = swiper.realIndex;
          var isVirtual = swiper.virtual && params.virtual.enabled;
          slides.removeClass("".concat(params.slideActiveClass, " ").concat(params.slideNextClass, " ").concat(params.slidePrevClass, " ").concat(params.slideDuplicateActiveClass, " ").concat(params.slideDuplicateNextClass, " ").concat(params.slideDuplicatePrevClass));
          var activeSlide;
          if (isVirtual) {
            activeSlide = swiper.$wrapperEl.find(".".concat(params.slideClass, "[data-swiper-slide-index=\"").concat(activeIndex, "\"]"));
          } else {
            activeSlide = slides.eq(activeIndex);
          }

          // Active classes
          activeSlide.addClass(params.slideActiveClass);
          if (params.loop) {
            // Duplicate to all looped slides
            if (activeSlide.hasClass(params.slideDuplicateClass)) {
              $wrapperEl.children(".".concat(params.slideClass, ":not(.").concat(params.slideDuplicateClass, ")[data-swiper-slide-index=\"").concat(realIndex, "\"]")).addClass(params.slideDuplicateActiveClass);
            } else {
              $wrapperEl.children(".".concat(params.slideClass, ".").concat(params.slideDuplicateClass, "[data-swiper-slide-index=\"").concat(realIndex, "\"]")).addClass(params.slideDuplicateActiveClass);
            }
          }
          // Next Slide
          var nextSlide = activeSlide.nextAll(".".concat(params.slideClass)).eq(0).addClass(params.slideNextClass);
          if (params.loop && nextSlide.length === 0) {
            nextSlide = slides.eq(0);
            nextSlide.addClass(params.slideNextClass);
          }
          // Prev Slide
          var prevSlide = activeSlide.prevAll(".".concat(params.slideClass)).eq(0).addClass(params.slidePrevClass);
          if (params.loop && prevSlide.length === 0) {
            prevSlide = slides.eq(-1);
            prevSlide.addClass(params.slidePrevClass);
          }
          if (params.loop) {
            // Duplicate to all looped slides
            if (nextSlide.hasClass(params.slideDuplicateClass)) {
              $wrapperEl.children(".".concat(params.slideClass, ":not(.").concat(params.slideDuplicateClass, ")[data-swiper-slide-index=\"").concat(nextSlide.attr('data-swiper-slide-index'), "\"]")).addClass(params.slideDuplicateNextClass);
            } else {
              $wrapperEl.children(".".concat(params.slideClass, ".").concat(params.slideDuplicateClass, "[data-swiper-slide-index=\"").concat(nextSlide.attr('data-swiper-slide-index'), "\"]")).addClass(params.slideDuplicateNextClass);
            }
            if (prevSlide.hasClass(params.slideDuplicateClass)) {
              $wrapperEl.children(".".concat(params.slideClass, ":not(.").concat(params.slideDuplicateClass, ")[data-swiper-slide-index=\"").concat(prevSlide.attr('data-swiper-slide-index'), "\"]")).addClass(params.slideDuplicatePrevClass);
            } else {
              $wrapperEl.children(".".concat(params.slideClass, ".").concat(params.slideDuplicateClass, "[data-swiper-slide-index=\"").concat(prevSlide.attr('data-swiper-slide-index'), "\"]")).addClass(params.slideDuplicatePrevClass);
            }
          }
        }
        function updateActiveIndex(newActiveIndex) {
          var swiper = this;
          var translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
          var slidesGrid = swiper.slidesGrid,
            snapGrid = swiper.snapGrid,
            params = swiper.params,
            previousIndex = swiper.activeIndex,
            previousRealIndex = swiper.realIndex,
            previousSnapIndex = swiper.snapIndex;
          var activeIndex = newActiveIndex;
          var snapIndex;
          if (typeof activeIndex === 'undefined') {
            for (var i = 0; i < slidesGrid.length; i += 1) {
              if (typeof slidesGrid[i + 1] !== 'undefined') {
                if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - (slidesGrid[i + 1] - slidesGrid[i]) / 2) {
                  activeIndex = i;
                } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) {
                  activeIndex = i + 1;
                }
              } else if (translate >= slidesGrid[i]) {
                activeIndex = i;
              }
            }
            // Normalize slideIndex
            if (params.normalizeSlideIndex) {
              if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0;
            }
          }
          if (snapGrid.indexOf(translate) >= 0) {
            snapIndex = snapGrid.indexOf(translate);
          } else {
            snapIndex = Math.floor(activeIndex / params.slidesPerGroup);
          }
          if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
          if (activeIndex === previousIndex) {
            if (snapIndex !== previousSnapIndex) {
              swiper.snapIndex = snapIndex;
              swiper.emit('snapIndexChange');
            }
            return;
          }

          // Get real index
          var realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10);
          Utils.extend(swiper, {
            snapIndex: snapIndex,
            realIndex: realIndex,
            previousIndex: previousIndex,
            activeIndex: activeIndex
          });
          swiper.emit('activeIndexChange');
          swiper.emit('snapIndexChange');
          if (previousRealIndex !== realIndex) {
            swiper.emit('realIndexChange');
          }
          if (swiper.initialized || swiper.runCallbacksOnInit) {
            swiper.emit('slideChange');
          }
        }
        function updateClickedSlide(e) {
          var swiper = this;
          var params = swiper.params;
          var slide = $(e.target).closest(".".concat(params.slideClass))[0];
          var slideFound = false;
          if (slide) {
            for (var i = 0; i < swiper.slides.length; i += 1) {
              if (swiper.slides[i] === slide) slideFound = true;
            }
          }
          if (slide && slideFound) {
            swiper.clickedSlide = slide;
            if (swiper.virtual && swiper.params.virtual.enabled) {
              swiper.clickedIndex = parseInt($(slide).attr('data-swiper-slide-index'), 10);
            } else {
              swiper.clickedIndex = $(slide).index();
            }
          } else {
            swiper.clickedSlide = undefined;
            swiper.clickedIndex = undefined;
            return;
          }
          if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) {
            swiper.slideToClickedSlide();
          }
        }
        var update = {
          updateSize: updateSize,
          updateSlides: updateSlides,
          updateAutoHeight: updateAutoHeight,
          updateSlidesOffset: updateSlidesOffset,
          updateSlidesProgress: updateSlidesProgress,
          updateProgress: updateProgress,
          updateSlidesClasses: updateSlidesClasses,
          updateActiveIndex: updateActiveIndex,
          updateClickedSlide: updateClickedSlide
        };
        function getTranslate() {
          var axis = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.isHorizontal() ? 'x' : 'y';
          var swiper = this;
          var params = swiper.params,
            rtl = swiper.rtlTranslate,
            translate = swiper.translate,
            $wrapperEl = swiper.$wrapperEl;
          if (params.virtualTranslate) {
            return rtl ? -translate : translate;
          }
          var currentTranslate = Utils.getTranslate($wrapperEl[0], axis);
          if (rtl) currentTranslate = -currentTranslate;
          return currentTranslate || 0;
        }
        function setTranslate(translate, byController) {
          var swiper = this;
          var rtl = swiper.rtlTranslate,
            params = swiper.params,
            $wrapperEl = swiper.$wrapperEl,
            progress = swiper.progress;
          var x = 0;
          var y = 0;
          var z = 0;
          if (swiper.isHorizontal()) {
            x = rtl ? -translate : translate;
          } else {
            y = translate;
          }
          if (params.roundLengths) {
            x = Math.floor(x);
            y = Math.floor(y);
          }
          if (!params.virtualTranslate) {
            if (Support.transforms3d) $wrapperEl.transform("translate3d(".concat(x, "px, ").concat(y, "px, ").concat(z, "px)"));else $wrapperEl.transform("translate(".concat(x, "px, ").concat(y, "px)"));
          }
          swiper.previousTranslate = swiper.translate;
          swiper.translate = swiper.isHorizontal() ? x : y;

          // Check if we need to update progress
          var newProgress;
          var translatesDiff = swiper.maxTranslate() - swiper.minTranslate();
          if (translatesDiff === 0) {
            newProgress = 0;
          } else {
            newProgress = (translate - swiper.minTranslate()) / translatesDiff;
          }
          if (newProgress !== progress) {
            swiper.updateProgress(translate);
          }
          swiper.emit('setTranslate', swiper.translate, byController);
        }
        function minTranslate() {
          return -this.snapGrid[0];
        }
        function maxTranslate() {
          return -this.snapGrid[this.snapGrid.length - 1];
        }
        var translate = {
          getTranslate: getTranslate,
          setTranslate: setTranslate,
          minTranslate: minTranslate,
          maxTranslate: maxTranslate
        };
        function setTransition(duration, byController) {
          var swiper = this;
          swiper.$wrapperEl.transition(duration);
          swiper.emit('setTransition', duration, byController);
        }
        function transitionStart() {
          var runCallbacks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
          var direction = arguments.length > 1 ? arguments[1] : undefined;
          var swiper = this;
          var activeIndex = swiper.activeIndex,
            params = swiper.params,
            previousIndex = swiper.previousIndex;
          if (params.autoHeight) {
            swiper.updateAutoHeight();
          }
          var dir = direction;
          if (!dir) {
            if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';
          }
          swiper.emit('transitionStart');
          if (runCallbacks && activeIndex !== previousIndex) {
            if (dir === 'reset') {
              swiper.emit('slideResetTransitionStart');
              return;
            }
            swiper.emit('slideChangeTransitionStart');
            if (dir === 'next') {
              swiper.emit('slideNextTransitionStart');
            } else {
              swiper.emit('slidePrevTransitionStart');
            }
          }
        }
        function transitionEnd() {
          var runCallbacks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
          var direction = arguments.length > 1 ? arguments[1] : undefined;
          var swiper = this;
          var activeIndex = swiper.activeIndex,
            previousIndex = swiper.previousIndex;
          swiper.animating = false;
          swiper.setTransition(0);
          var dir = direction;
          if (!dir) {
            if (activeIndex > previousIndex) dir = 'next';else if (activeIndex < previousIndex) dir = 'prev';else dir = 'reset';
          }
          swiper.emit('transitionEnd');
          if (runCallbacks && activeIndex !== previousIndex) {
            if (dir === 'reset') {
              swiper.emit('slideResetTransitionEnd');
              return;
            }
            swiper.emit('slideChangeTransitionEnd');
            if (dir === 'next') {
              swiper.emit('slideNextTransitionEnd');
            } else {
              swiper.emit('slidePrevTransitionEnd');
            }
          }
        }
        var transition = {
          setTransition: setTransition,
          transitionStart: transitionStart,
          transitionEnd: transitionEnd
        };
        function slideTo() {
          var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
          var speed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.params.speed;
          var runCallbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
          var internal = arguments.length > 3 ? arguments[3] : undefined;
          var swiper = this;
          var slideIndex = index;
          if (slideIndex < 0) slideIndex = 0;
          var params = swiper.params,
            snapGrid = swiper.snapGrid,
            slidesGrid = swiper.slidesGrid,
            previousIndex = swiper.previousIndex,
            activeIndex = swiper.activeIndex,
            rtl = swiper.rtlTranslate;
          if (swiper.animating && params.preventInteractionOnTransition) {
            return false;
          }
          var snapIndex = Math.floor(slideIndex / params.slidesPerGroup);
          if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1;
          if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) {
            swiper.emit('beforeSlideChangeStart');
          }
          var translate = -snapGrid[snapIndex];

          // Update progress
          swiper.updateProgress(translate);

          // Normalize slideIndex
          if (params.normalizeSlideIndex) {
            for (var i = 0; i < slidesGrid.length; i += 1) {
              if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) {
                slideIndex = i;
              }
            }
          }
          // Directions locks
          if (swiper.initialized && slideIndex !== activeIndex) {
            if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) {
              return false;
            }
            if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) {
              if ((activeIndex || 0) !== slideIndex) return false;
            }
          }
          var direction;
          if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset';

          // Update Index
          if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) {
            swiper.updateActiveIndex(slideIndex);
            // Update Height
            if (params.autoHeight) {
              swiper.updateAutoHeight();
            }
            swiper.updateSlidesClasses();
            if (params.effect !== 'slide') {
              swiper.setTranslate(translate);
            }
            if (direction !== 'reset') {
              swiper.transitionStart(runCallbacks, direction);
              swiper.transitionEnd(runCallbacks, direction);
            }
            return false;
          }
          if (speed === 0 || !Support.transition) {
            swiper.setTransition(0);
            swiper.setTranslate(translate);
            swiper.updateActiveIndex(slideIndex);
            swiper.updateSlidesClasses();
            swiper.emit('beforeTransitionStart', speed, internal);
            swiper.transitionStart(runCallbacks, direction);
            swiper.transitionEnd(runCallbacks, direction);
          } else {
            swiper.setTransition(speed);
            swiper.setTranslate(translate);
            swiper.updateActiveIndex(slideIndex);
            swiper.updateSlidesClasses();
            swiper.emit('beforeTransitionStart', speed, internal);
            swiper.transitionStart(runCallbacks, direction);
            if (!swiper.animating) {
              swiper.animating = true;
              if (!swiper.onSlideToWrapperTransitionEnd) {
                swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) {
                  if (!swiper || swiper.destroyed) return;
                  if (e.target !== this) return;
                  swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
                  swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
                  swiper.onSlideToWrapperTransitionEnd = null;
                  delete swiper.onSlideToWrapperTransitionEnd;
                  swiper.transitionEnd(runCallbacks, direction);
                };
              }
              swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd);
              swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd);
            }
          }
          return true;
        }
        function slideToLoop() {
          var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
          var speed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.params.speed;
          var runCallbacks = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
          var internal = arguments.length > 3 ? arguments[3] : undefined;
          var swiper = this;
          var newIndex = index;
          if (swiper.params.loop) {
            newIndex += swiper.loopedSlides;
          }
          return swiper.slideTo(newIndex, speed, runCallbacks, internal);
        }

        /* eslint no-unused-vars: "off" */
        function slideNext() {
          var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;
          var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
          var internal = arguments.length > 2 ? arguments[2] : undefined;
          var swiper = this;
          var params = swiper.params,
            animating = swiper.animating;
          if (params.loop) {
            if (animating) return false;
            swiper.loopFix();
            // eslint-disable-next-line
            swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
            return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);
          }
          return swiper.slideTo(swiper.activeIndex + params.slidesPerGroup, speed, runCallbacks, internal);
        }

        /* eslint no-unused-vars: "off" */
        function slidePrev() {
          var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;
          var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
          var internal = arguments.length > 2 ? arguments[2] : undefined;
          var swiper = this;
          var params = swiper.params,
            animating = swiper.animating,
            snapGrid = swiper.snapGrid,
            slidesGrid = swiper.slidesGrid,
            rtlTranslate = swiper.rtlTranslate;
          if (params.loop) {
            if (animating) return false;
            swiper.loopFix();
            // eslint-disable-next-line
            swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
          }
          var translate = rtlTranslate ? swiper.translate : -swiper.translate;
          function normalize(val) {
            if (val < 0) return -Math.floor(Math.abs(val));
            return Math.floor(val);
          }
          var normalizedTranslate = normalize(translate);
          var normalizedSnapGrid = snapGrid.map(function (val) {
            return normalize(val);
          });
          slidesGrid.map(function (val) {
            return normalize(val);
          });
          snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)];
          var prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1];
          var prevIndex;
          if (typeof prevSnap !== 'undefined') {
            prevIndex = slidesGrid.indexOf(prevSnap);
            if (prevIndex < 0) prevIndex = swiper.activeIndex - 1;
          }
          return swiper.slideTo(prevIndex, speed, runCallbacks, internal);
        }

        /* eslint no-unused-vars: "off" */
        function slideReset() {
          var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;
          var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
          var internal = arguments.length > 2 ? arguments[2] : undefined;
          var swiper = this;
          return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal);
        }

        /* eslint no-unused-vars: "off" */
        function slideToClosest() {
          var speed = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;
          var runCallbacks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
          var internal = arguments.length > 2 ? arguments[2] : undefined;
          var swiper = this;
          var index = swiper.activeIndex;
          var snapIndex = Math.floor(index / swiper.params.slidesPerGroup);
          if (snapIndex < swiper.snapGrid.length - 1) {
            var _translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate;
            var currentSnap = swiper.snapGrid[snapIndex];
            var nextSnap = swiper.snapGrid[snapIndex + 1];
            if (_translate - currentSnap > (nextSnap - currentSnap) / 2) {
              index = swiper.params.slidesPerGroup;
            }
          }
          return swiper.slideTo(index, speed, runCallbacks, internal);
        }
        function slideToClickedSlide() {
          var swiper = this;
          var params = swiper.params,
            $wrapperEl = swiper.$wrapperEl;
          var slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView;
          var slideToIndex = swiper.clickedIndex;
          var realIndex;
          if (params.loop) {
            if (swiper.animating) return;
            realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10);
            if (params.centeredSlides) {
              if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) {
                swiper.loopFix();
                slideToIndex = $wrapperEl.children(".".concat(params.slideClass, "[data-swiper-slide-index=\"").concat(realIndex, "\"]:not(.").concat(params.slideDuplicateClass, ")")).eq(0).index();
                Utils.nextTick(function () {
                  swiper.slideTo(slideToIndex);
                });
              } else {
                swiper.slideTo(slideToIndex);
              }
            } else if (slideToIndex > swiper.slides.length - slidesPerView) {
              swiper.loopFix();
              slideToIndex = $wrapperEl.children(".".concat(params.slideClass, "[data-swiper-slide-index=\"").concat(realIndex, "\"]:not(.").concat(params.slideDuplicateClass, ")")).eq(0).index();
              Utils.nextTick(function () {
                swiper.slideTo(slideToIndex);
              });
            } else {
              swiper.slideTo(slideToIndex);
            }
          } else {
            swiper.slideTo(slideToIndex);
          }
        }
        var slide = {
          slideTo: slideTo,
          slideToLoop: slideToLoop,
          slideNext: slideNext,
          slidePrev: slidePrev,
          slideReset: slideReset,
          slideToClosest: slideToClosest,
          slideToClickedSlide: slideToClickedSlide
        };
        function loopCreate() {
          var swiper = this;
          var params = swiper.params,
            $wrapperEl = swiper.$wrapperEl;
          // Remove duplicated slides
          $wrapperEl.children(".".concat(params.slideClass, ".").concat(params.slideDuplicateClass)).remove();
          var slides = $wrapperEl.children(".".concat(params.slideClass));
          if (params.loopFillGroupWithBlank) {
            var blankSlidesNum = params.slidesPerGroup - slides.length % params.slidesPerGroup;
            if (blankSlidesNum !== params.slidesPerGroup) {
              for (var i = 0; i < blankSlidesNum; i += 1) {
                var blankNode = $(doc.createElement('div')).addClass("".concat(params.slideClass, " ").concat(params.slideBlankClass));
                $wrapperEl.append(blankNode);
              }
              slides = $wrapperEl.children(".".concat(params.slideClass));
            }
          }
          if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length;
          swiper.loopedSlides = parseInt(params.loopedSlides || params.slidesPerView, 10);
          swiper.loopedSlides += params.loopAdditionalSlides;
          if (swiper.loopedSlides > slides.length) {
            swiper.loopedSlides = slides.length;
          }
          var prependSlides = [];
          var appendSlides = [];
          slides.each(function (index, el) {
            var slide = $(el);
            if (index < swiper.loopedSlides) appendSlides.push(el);
            if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el);
            slide.attr('data-swiper-slide-index', index);
          });
          for (var _i3 = 0; _i3 < appendSlides.length; _i3 += 1) {
            $wrapperEl.append($(appendSlides[_i3].cloneNode(true)).addClass(params.slideDuplicateClass));
          }
          for (var _i4 = prependSlides.length - 1; _i4 >= 0; _i4 -= 1) {
            $wrapperEl.prepend($(prependSlides[_i4].cloneNode(true)).addClass(params.slideDuplicateClass));
          }
        }
        function loopFix() {
          var swiper = this;
          var params = swiper.params,
            activeIndex = swiper.activeIndex,
            slides = swiper.slides,
            loopedSlides = swiper.loopedSlides,
            allowSlidePrev = swiper.allowSlidePrev,
            allowSlideNext = swiper.allowSlideNext,
            snapGrid = swiper.snapGrid,
            rtl = swiper.rtlTranslate;
          var newIndex;
          swiper.allowSlidePrev = true;
          swiper.allowSlideNext = true;
          var snapTranslate = -snapGrid[activeIndex];
          var diff = snapTranslate - swiper.getTranslate();

          // Fix For Negative Oversliding
          if (activeIndex < loopedSlides) {
            newIndex = slides.length - loopedSlides * 3 + activeIndex;
            newIndex += loopedSlides;
            var slideChanged = swiper.slideTo(newIndex, 0, false, true);
            if (slideChanged && diff !== 0) {
              swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
            }
          } else if (params.slidesPerView === 'auto' && activeIndex >= loopedSlides * 2 || activeIndex >= slides.length - loopedSlides) {
            // Fix For Positive Oversliding
            newIndex = -slides.length + activeIndex + loopedSlides;
            newIndex += loopedSlides;
            var _slideChanged = swiper.slideTo(newIndex, 0, false, true);
            if (_slideChanged && diff !== 0) {
              swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff);
            }
          }
          swiper.allowSlidePrev = allowSlidePrev;
          swiper.allowSlideNext = allowSlideNext;
        }
        function loopDestroy() {
          var swiper = this;
          var $wrapperEl = swiper.$wrapperEl,
            params = swiper.params,
            slides = swiper.slides;
          $wrapperEl.children(".".concat(params.slideClass, ".").concat(params.slideDuplicateClass, ",.").concat(params.slideClass, ".").concat(params.slideBlankClass)).remove();
          slides.removeAttr('data-swiper-slide-index');
        }
        var loop = {
          loopCreate: loopCreate,
          loopFix: loopFix,
          loopDestroy: loopDestroy
        };
        function setGrabCursor(moving) {
          var swiper = this;
          if (Support.touch || !swiper.params.simulateTouch || swiper.params.watchOverflow && swiper.isLocked) return;
          var el = swiper.el;
          el.style.cursor = 'move';
          el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab';
          el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab';
          el.style.cursor = moving ? 'grabbing' : 'grab';
        }
        function unsetGrabCursor() {
          var swiper = this;
          if (Support.touch || swiper.params.watchOverflow && swiper.isLocked) return;
          swiper.el.style.cursor = '';
        }
        var grabCursor = {
          setGrabCursor: setGrabCursor,
          unsetGrabCursor: unsetGrabCursor
        };
        function appendSlide(slides) {
          var swiper = this;
          var $wrapperEl = swiper.$wrapperEl,
            params = swiper.params;
          if (params.loop) {
            swiper.loopDestroy();
          }
          if (_typeof(slides) === 'object' && 'length' in slides) {
            for (var i = 0; i < slides.length; i += 1) {
              if (slides[i]) $wrapperEl.append(slides[i]);
            }
          } else {
            $wrapperEl.append(slides);
          }
          if (params.loop) {
            swiper.loopCreate();
          }
          if (!(params.observer && Support.observer)) {
            swiper.update();
          }
        }
        function prependSlide(slides) {
          var swiper = this;
          var params = swiper.params,
            $wrapperEl = swiper.$wrapperEl,
            activeIndex = swiper.activeIndex;
          if (params.loop) {
            swiper.loopDestroy();
          }
          var newActiveIndex = activeIndex + 1;
          if (_typeof(slides) === 'object' && 'length' in slides) {
            for (var i = 0; i < slides.length; i += 1) {
              if (slides[i]) $wrapperEl.prepend(slides[i]);
            }
            newActiveIndex = activeIndex + slides.length;
          } else {
            $wrapperEl.prepend(slides);
          }
          if (params.loop) {
            swiper.loopCreate();
          }
          if (!(params.observer && Support.observer)) {
            swiper.update();
          }
          swiper.slideTo(newActiveIndex, 0, false);
        }
        function addSlide(index, slides) {
          var swiper = this;
          var $wrapperEl = swiper.$wrapperEl,
            params = swiper.params,
            activeIndex = swiper.activeIndex;
          var activeIndexBuffer = activeIndex;
          if (params.loop) {
            activeIndexBuffer -= swiper.loopedSlides;
            swiper.loopDestroy();
            swiper.slides = $wrapperEl.children(".".concat(params.slideClass));
          }
          var baseLength = swiper.slides.length;
          if (index <= 0) {
            swiper.prependSlide(slides);
            return;
          }
          if (index >= baseLength) {
            swiper.appendSlide(slides);
            return;
          }
          var newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer;
          var slidesBuffer = [];
          for (var i = baseLength - 1; i >= index; i -= 1) {
            var currentSlide = swiper.slides.eq(i);
            currentSlide.remove();
            slidesBuffer.unshift(currentSlide);
          }
          if (_typeof(slides) === 'object' && 'length' in slides) {
            for (var _i5 = 0; _i5 < slides.length; _i5 += 1) {
              if (slides[_i5]) $wrapperEl.append(slides[_i5]);
            }
            newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer;
          } else {
            $wrapperEl.append(slides);
          }
          for (var _i6 = 0; _i6 < slidesBuffer.length; _i6 += 1) {
            $wrapperEl.append(slidesBuffer[_i6]);
          }
          if (params.loop) {
            swiper.loopCreate();
          }
          if (!(params.observer && Support.observer)) {
            swiper.update();
          }
          if (params.loop) {
            swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
          } else {
            swiper.slideTo(newActiveIndex, 0, false);
          }
        }
        function removeSlide(slidesIndexes) {
          var swiper = this;
          var params = swiper.params,
            $wrapperEl = swiper.$wrapperEl,
            activeIndex = swiper.activeIndex;
          var activeIndexBuffer = activeIndex;
          if (params.loop) {
            activeIndexBuffer -= swiper.loopedSlides;
            swiper.loopDestroy();
            swiper.slides = $wrapperEl.children(".".concat(params.slideClass));
          }
          var newActiveIndex = activeIndexBuffer;
          var indexToRemove;
          if (_typeof(slidesIndexes) === 'object' && 'length' in slidesIndexes) {
            for (var i = 0; i < slidesIndexes.length; i += 1) {
              indexToRemove = slidesIndexes[i];
              if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
              if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
            }
            newActiveIndex = Math.max(newActiveIndex, 0);
          } else {
            indexToRemove = slidesIndexes;
            if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove();
            if (indexToRemove < newActiveIndex) newActiveIndex -= 1;
            newActiveIndex = Math.max(newActiveIndex, 0);
          }
          if (params.loop) {
            swiper.loopCreate();
          }
          if (!(params.observer && Support.observer)) {
            swiper.update();
          }
          if (params.loop) {
            swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false);
          } else {
            swiper.slideTo(newActiveIndex, 0, false);
          }
        }
        function removeAllSlides() {
          var swiper = this;
          var slidesIndexes = [];
          for (var i = 0; i < swiper.slides.length; i += 1) {
            slidesIndexes.push(i);
          }
          swiper.removeSlide(slidesIndexes);
        }
        var manipulation = {
          appendSlide: appendSlide,
          prependSlide: prependSlide,
          addSlide: addSlide,
          removeSlide: removeSlide,
          removeAllSlides: removeAllSlides
        };
        var Device = function Device() {
          var ua = win.navigator.userAgent;
          var device = {
            ios: false,
            android: false,
            androidChrome: false,
            desktop: false,
            windows: false,
            iphone: false,
            ipod: false,
            ipad: false,
            cordova: win.cordova || win.phonegap,
            phonegap: win.cordova || win.phonegap
          };
          var windows = ua.match(/(Windows Phone);?[\s\/]+([\d.]+)?/); // eslint-disable-line
          var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
          var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
          var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
          var iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);

          // Windows
          if (windows) {
            device.os = 'windows';
            device.osVersion = windows[2];
            device.windows = true;
          }
          // Android
          if (android && !windows) {
            device.os = 'android';
            device.osVersion = android[2];
            device.android = true;
            device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0;
          }
          if (ipad || iphone || ipod) {
            device.os = 'ios';
            device.ios = true;
          }
          // iOS
          if (iphone && !ipod) {
            device.osVersion = iphone[2].replace(/_/g, '.');
            device.iphone = true;
          }
          if (ipad) {
            device.osVersion = ipad[2].replace(/_/g, '.');
            device.ipad = true;
          }
          if (ipod) {
            device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
            device.iphone = true;
          }
          // iOS 8+ changed UA
          if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) {
            if (device.osVersion.split('.')[0] === '10') {
              device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0];
            }
          }

          // Desktop
          device.desktop = !(device.os || device.android || device.webView);

          // Webview
          device.webView = (iphone || ipad || ipod) && ua.match(/.*AppleWebKit(?!.*Safari)/i);

          // Minimal UI
          if (device.os && device.os === 'ios') {
            var osVersionArr = device.osVersion.split('.');
            var metaViewport = doc.querySelector('meta[name="viewport"]');
            device.minimalUi = !device.webView && (ipod || iphone) && (osVersionArr[0] * 1 === 7 ? osVersionArr[1] * 1 >= 1 : osVersionArr[0] * 1 > 7) && metaViewport && metaViewport.getAttribute('content').indexOf('minimal-ui') >= 0;
          }

          // Pixel Ratio
          device.pixelRatio = win.devicePixelRatio || 1;

          // Export object
          return device;
        }();
        function onTouchStart(event) {
          var swiper = this;
          var data = swiper.touchEventsData;
          var params = swiper.params,
            touches = swiper.touches;
          if (swiper.animating && params.preventInteractionOnTransition) {
            return;
          }
          var e = event;
          if (e.originalEvent) e = e.originalEvent;
          data.isTouchEvent = e.type === 'touchstart';
          if (!data.isTouchEvent && 'which' in e && e.which === 3) return;
          if (!data.isTouchEvent && 'button' in e && e.button > 0) return;
          if (data.isTouched && data.isMoved) return;
          if (params.noSwiping && $(e.target).closest(params.noSwipingSelector ? params.noSwipingSelector : ".".concat(params.noSwipingClass))[0]) {
            swiper.allowClick = true;
            return;
          }
          if (params.swipeHandler) {
            if (!$(e).closest(params.swipeHandler)[0]) return;
          }
          touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
          touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
          var startX = touches.currentX;
          var startY = touches.currentY;

          // Do NOT start if iOS edge swipe is detected. Otherwise iOS app (UIWebView) cannot swipe-to-go-back anymore

          var edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection;
          var edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold;
          if (edgeSwipeDetection && (startX <= edgeSwipeThreshold || startX >= win.screen.width - edgeSwipeThreshold)) {
            return;
          }
          Utils.extend(data, {
            isTouched: true,
            isMoved: false,
            allowTouchCallbacks: true,
            isScrolling: undefined,
            startMoving: undefined
          });
          touches.startX = startX;
          touches.startY = startY;
          data.touchStartTime = Utils.now();
          swiper.allowClick = true;
          swiper.updateSize();
          swiper.swipeDirection = undefined;
          if (params.threshold > 0) data.allowThresholdMove = false;
          if (e.type !== 'touchstart') {
            var preventDefault = true;
            if ($(e.target).is(data.formElements)) preventDefault = false;
            if (doc.activeElement && $(doc.activeElement).is(data.formElements) && doc.activeElement !== e.target) {
              doc.activeElement.blur();
            }
            var shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault;
            if (params.touchStartForcePreventDefault || shouldPreventDefault) {
              e.preventDefault();
            }
          }
          swiper.emit('touchStart', e);
        }
        function onTouchMove(event) {
          var swiper = this;
          var data = swiper.touchEventsData;
          var params = swiper.params,
            touches = swiper.touches,
            rtl = swiper.rtlTranslate;
          var e = event;
          if (e.originalEvent) e = e.originalEvent;
          if (!data.isTouched) {
            if (data.startMoving && data.isScrolling) {
              swiper.emit('touchMoveOpposite', e);
            }
            return;
          }
          if (data.isTouchEvent && e.type === 'mousemove') return;
          var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
          var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
          if (e.preventedByNestedSwiper) {
            touches.startX = pageX;
            touches.startY = pageY;
            return;
          }
          if (!swiper.allowTouchMove) {
            // isMoved = true;
            swiper.allowClick = false;
            if (data.isTouched) {
              Utils.extend(touches, {
                startX: pageX,
                startY: pageY,
                currentX: pageX,
                currentY: pageY
              });
              data.touchStartTime = Utils.now();
            }
            return;
          }
          if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) {
            if (swiper.isVertical()) {
              // Vertical
              if (pageY < touches.startY && swiper.translate <= swiper.maxTranslate() || pageY > touches.startY && swiper.translate >= swiper.minTranslate()) {
                data.isTouched = false;
                data.isMoved = false;
                return;
              }
            } else if (pageX < touches.startX && swiper.translate <= swiper.maxTranslate() || pageX > touches.startX && swiper.translate >= swiper.minTranslate()) {
              return;
            }
          }
          if (data.isTouchEvent && doc.activeElement) {
            if (e.target === doc.activeElement && $(e.target).is(data.formElements)) {
              data.isMoved = true;
              swiper.allowClick = false;
              return;
            }
          }
          if (data.allowTouchCallbacks) {
            swiper.emit('touchMove', e);
          }
          if (e.targetTouches && e.targetTouches.length > 1) return;
          touches.currentX = pageX;
          touches.currentY = pageY;
          var diffX = touches.currentX - touches.startX;
          var diffY = touches.currentY - touches.startY;
          if (swiper.params.threshold && Math.sqrt(Math.pow(diffX, 2) + Math.pow(diffY, 2)) < swiper.params.threshold) return;
          if (typeof data.isScrolling === 'undefined') {
            var touchAngle;
            if (swiper.isHorizontal() && touches.currentY === touches.startY || swiper.isVertical() && touches.currentX === touches.startX) {
              data.isScrolling = false;
            } else {
              // eslint-disable-next-line
              if (diffX * diffX + diffY * diffY >= 25) {
                touchAngle = Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180 / Math.PI;
                data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : 90 - touchAngle > params.touchAngle;
              }
            }
          }
          if (data.isScrolling) {
            swiper.emit('touchMoveOpposite', e);
          }
          if (typeof data.startMoving === 'undefined') {
            if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) {
              data.startMoving = true;
            }
          }
          if (data.isScrolling) {
            data.isTouched = false;
            return;
          }
          if (!data.startMoving) {
            return;
          }
          swiper.allowClick = false;
          e.preventDefault();
          if (params.touchMoveStopPropagation && !params.nested) {
            e.stopPropagation();
          }
          if (!data.isMoved) {
            if (params.loop) {
              swiper.loopFix();
            }
            data.startTranslate = swiper.getTranslate();
            swiper.setTransition(0);
            if (swiper.animating) {
              swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend');
            }
            data.allowMomentumBounce = false;
            // Grab Cursor
            if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
              swiper.setGrabCursor(true);
            }
            swiper.emit('sliderFirstMove', e);
          }
          swiper.emit('sliderMove', e);
          data.isMoved = true;
          var diff = swiper.isHorizontal() ? diffX : diffY;
          touches.diff = diff;
          diff *= params.touchRatio;
          if (rtl) diff = -diff;
          swiper.swipeDirection = diff > 0 ? 'prev' : 'next';
          data.currentTranslate = diff + data.startTranslate;
          var disableParentSwiper = true;
          var resistanceRatio = params.resistanceRatio;
          if (params.touchReleaseOnEdges) {
            resistanceRatio = 0;
          }
          if (diff > 0 && data.currentTranslate > swiper.minTranslate()) {
            disableParentSwiper = false;
            if (params.resistance) data.currentTranslate = swiper.minTranslate() - 1 + Math.pow(-swiper.minTranslate() + data.startTranslate + diff, resistanceRatio);
          } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) {
            disableParentSwiper = false;
            if (params.resistance) data.currentTranslate = swiper.maxTranslate() + 1 - Math.pow(swiper.maxTranslate() - data.startTranslate - diff, resistanceRatio);
          }
          if (disableParentSwiper) {
            e.preventedByNestedSwiper = true;
          }

          // Directions locks
          if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) {
            data.currentTranslate = data.startTranslate;
          }
          if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) {
            data.currentTranslate = data.startTranslate;
          }

          // Threshold
          if (params.threshold > 0) {
            if (Math.abs(diff) > params.threshold || data.allowThresholdMove) {
              if (!data.allowThresholdMove) {
                data.allowThresholdMove = true;
                touches.startX = touches.currentX;
                touches.startY = touches.currentY;
                data.currentTranslate = data.startTranslate;
                touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY;
                return;
              }
            } else {
              data.currentTranslate = data.startTranslate;
              return;
            }
          }
          if (!params.followFinger) return;

          // Update active index in free mode
          if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) {
            swiper.updateActiveIndex();
            swiper.updateSlidesClasses();
          }
          if (params.freeMode) {
            // Velocity
            if (data.velocities.length === 0) {
              data.velocities.push({
                position: touches[swiper.isHorizontal() ? 'startX' : 'startY'],
                time: data.touchStartTime
              });
            }
            data.velocities.push({
              position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'],
              time: Utils.now()
            });
          }
          // Update progress
          swiper.updateProgress(data.currentTranslate);
          // Update translate
          swiper.setTranslate(data.currentTranslate);
        }
        function onTouchEnd(event) {
          var swiper = this;
          var data = swiper.touchEventsData;
          var params = swiper.params,
            touches = swiper.touches,
            rtl = swiper.rtlTranslate,
            $wrapperEl = swiper.$wrapperEl,
            slidesGrid = swiper.slidesGrid,
            snapGrid = swiper.snapGrid;
          var e = event;
          if (e.originalEvent) e = e.originalEvent;
          if (data.allowTouchCallbacks) {
            swiper.emit('touchEnd', e);
          }
          data.allowTouchCallbacks = false;
          if (!data.isTouched) {
            if (data.isMoved && params.grabCursor) {
              swiper.setGrabCursor(false);
            }
            data.isMoved = false;
            data.startMoving = false;
            return;
          }
          // Return Grab Cursor
          if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) {
            swiper.setGrabCursor(false);
          }

          // Time diff
          var touchEndTime = Utils.now();
          var timeDiff = touchEndTime - data.touchStartTime;

          // Tap, doubleTap, Click
          if (swiper.allowClick) {
            swiper.updateClickedSlide(e);
            swiper.emit('tap', e);
            if (timeDiff < 300 && touchEndTime - data.lastClickTime > 300) {
              if (data.clickTimeout) clearTimeout(data.clickTimeout);
              data.clickTimeout = Utils.nextTick(function () {
                if (!swiper || swiper.destroyed) return;
                swiper.emit('click', e);
              }, 300);
            }
            if (timeDiff < 300 && touchEndTime - data.lastClickTime < 300) {
              if (data.clickTimeout) clearTimeout(data.clickTimeout);
              swiper.emit('doubleTap', e);
            }
          }
          data.lastClickTime = Utils.now();
          Utils.nextTick(function () {
            if (!swiper.destroyed) swiper.allowClick = true;
          });
          if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) {
            data.isTouched = false;
            data.isMoved = false;
            data.startMoving = false;
            return;
          }
          data.isTouched = false;
          data.isMoved = false;
          data.startMoving = false;
          var currentPos;
          if (params.followFinger) {
            currentPos = rtl ? swiper.translate : -swiper.translate;
          } else {
            currentPos = -data.currentTranslate;
          }
          if (params.freeMode) {
            if (currentPos < -swiper.minTranslate()) {
              swiper.slideTo(swiper.activeIndex);
              return;
            }
            if (currentPos > -swiper.maxTranslate()) {
              if (swiper.slides.length < snapGrid.length) {
                swiper.slideTo(snapGrid.length - 1);
              } else {
                swiper.slideTo(swiper.slides.length - 1);
              }
              return;
            }
            if (params.freeModeMomentum) {
              if (data.velocities.length > 1) {
                var lastMoveEvent = data.velocities.pop();
                var velocityEvent = data.velocities.pop();
                var distance = lastMoveEvent.position - velocityEvent.position;
                var time = lastMoveEvent.time - velocityEvent.time;
                swiper.velocity = distance / time;
                swiper.velocity /= 2;
                if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) {
                  swiper.velocity = 0;
                }
                // this implies that the user stopped moving a finger then released.
                // There would be no events with distance zero, so the last event is stale.
                if (time > 150 || Utils.now() - lastMoveEvent.time > 300) {
                  swiper.velocity = 0;
                }
              } else {
                swiper.velocity = 0;
              }
              swiper.velocity *= params.freeModeMomentumVelocityRatio;
              data.velocities.length = 0;
              var momentumDuration = 1000 * params.freeModeMomentumRatio;
              var momentumDistance = swiper.velocity * momentumDuration;
              var newPosition = swiper.translate + momentumDistance;
              if (rtl) newPosition = -newPosition;
              var doBounce = false;
              var afterBouncePosition;
              var bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio;
              var needsLoopFix;
              if (newPosition < swiper.maxTranslate()) {
                if (params.freeModeMomentumBounce) {
                  if (newPosition + swiper.maxTranslate() < -bounceAmount) {
                    newPosition = swiper.maxTranslate() - bounceAmount;
                  }
                  afterBouncePosition = swiper.maxTranslate();
                  doBounce = true;
                  data.allowMomentumBounce = true;
                } else {
                  newPosition = swiper.maxTranslate();
                }
                if (params.loop && params.centeredSlides) needsLoopFix = true;
              } else if (newPosition > swiper.minTranslate()) {
                if (params.freeModeMomentumBounce) {
                  if (newPosition - swiper.minTranslate() > bounceAmount) {
                    newPosition = swiper.minTranslate() + bounceAmount;
                  }
                  afterBouncePosition = swiper.minTranslate();
                  doBounce = true;
                  data.allowMomentumBounce = true;
                } else {
                  newPosition = swiper.minTranslate();
                }
                if (params.loop && params.centeredSlides) needsLoopFix = true;
              } else if (params.freeModeSticky) {
                var nextSlide;
                for (var j = 0; j < snapGrid.length; j += 1) {
                  if (snapGrid[j] > -newPosition) {
                    nextSlide = j;
                    break;
                  }
                }
                if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') {
                  newPosition = snapGrid[nextSlide];
                } else {
                  newPosition = snapGrid[nextSlide - 1];
                }
                newPosition = -newPosition;
              }
              if (needsLoopFix) {
                swiper.once('transitionEnd', function () {
                  swiper.loopFix();
                });
              }
              // Fix duration
              if (swiper.velocity !== 0) {
                if (rtl) {
                  momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity);
                } else {
                  momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity);
                }
              } else if (params.freeModeSticky) {
                swiper.slideToClosest();
                return;
              }
              if (params.freeModeMomentumBounce && doBounce) {
                swiper.updateProgress(afterBouncePosition);
                swiper.setTransition(momentumDuration);
                swiper.setTranslate(newPosition);
                swiper.transitionStart(true, swiper.swipeDirection);
                swiper.animating = true;
                $wrapperEl.transitionEnd(function () {
                  if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return;
                  swiper.emit('momentumBounce');
                  swiper.setTransition(params.speed);
                  swiper.setTranslate(afterBouncePosition);
                  $wrapperEl.transitionEnd(function () {
                    if (!swiper || swiper.destroyed) return;
                    swiper.transitionEnd();
                  });
                });
              } else if (swiper.velocity) {
                swiper.updateProgress(newPosition);
                swiper.setTransition(momentumDuration);
                swiper.setTranslate(newPosition);
                swiper.transitionStart(true, swiper.swipeDirection);
                if (!swiper.animating) {
                  swiper.animating = true;
                  $wrapperEl.transitionEnd(function () {
                    if (!swiper || swiper.destroyed) return;
                    swiper.transitionEnd();
                  });
                }
              } else {
                swiper.updateProgress(newPosition);
              }
              swiper.updateActiveIndex();
              swiper.updateSlidesClasses();
            } else if (params.freeModeSticky) {
              swiper.slideToClosest();
              return;
            }
            if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) {
              swiper.updateProgress();
              swiper.updateActiveIndex();
              swiper.updateSlidesClasses();
            }
            return;
          }

          // Find current slide
          var stopIndex = 0;
          var groupSize = swiper.slidesSizesGrid[0];
          for (var i = 0; i < slidesGrid.length; i += params.slidesPerGroup) {
            if (typeof slidesGrid[i + params.slidesPerGroup] !== 'undefined') {
              if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + params.slidesPerGroup]) {
                stopIndex = i;
                groupSize = slidesGrid[i + params.slidesPerGroup] - slidesGrid[i];
              }
            } else if (currentPos >= slidesGrid[i]) {
              stopIndex = i;
              groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2];
            }
          }

          // Find current slide size
          var ratio = (currentPos - slidesGrid[stopIndex]) / groupSize;
          if (timeDiff > params.longSwipesMs) {
            // Long touches
            if (!params.longSwipes) {
              swiper.slideTo(swiper.activeIndex);
              return;
            }
            if (swiper.swipeDirection === 'next') {
              if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + params.slidesPerGroup);else swiper.slideTo(stopIndex);
            }
            if (swiper.swipeDirection === 'prev') {
              if (ratio > 1 - params.longSwipesRatio) swiper.slideTo(stopIndex + params.slidesPerGroup);else swiper.slideTo(stopIndex);
            }
          } else {
            // Short swipes
            if (!params.shortSwipes) {
              swiper.slideTo(swiper.activeIndex);
              return;
            }
            if (swiper.swipeDirection === 'next') {
              swiper.slideTo(stopIndex + params.slidesPerGroup);
            }
            if (swiper.swipeDirection === 'prev') {
              swiper.slideTo(stopIndex);
            }
          }
        }
        function onResize() {
          var swiper = this;
          var params = swiper.params,
            el = swiper.el;
          if (el && el.offsetWidth === 0) return;

          // Breakpoints
          if (params.breakpoints) {
            swiper.setBreakpoint();
          }

          // Save locks
          var allowSlideNext = swiper.allowSlideNext,
            allowSlidePrev = swiper.allowSlidePrev,
            snapGrid = swiper.snapGrid;

          // Disable locks on resize
          swiper.allowSlideNext = true;
          swiper.allowSlidePrev = true;
          swiper.updateSize();
          swiper.updateSlides();
          if (params.freeMode) {
            var newTranslate = Math.min(Math.max(swiper.translate, swiper.maxTranslate()), swiper.minTranslate());
            swiper.setTranslate(newTranslate);
            swiper.updateActiveIndex();
            swiper.updateSlidesClasses();
            if (params.autoHeight) {
              swiper.updateAutoHeight();
            }
          } else {
            swiper.updateSlidesClasses();
            if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
              swiper.slideTo(swiper.slides.length - 1, 0, false, true);
            } else {
              swiper.slideTo(swiper.activeIndex, 0, false, true);
            }
          }
          if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) {
            swiper.autoplay.run();
          }
          // Return locks after resize
          swiper.allowSlidePrev = allowSlidePrev;
          swiper.allowSlideNext = allowSlideNext;
          if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) {
            swiper.checkOverflow();
          }
        }
        function onClick(e) {
          var swiper = this;
          if (!swiper.allowClick) {
            if (swiper.params.preventClicks) e.preventDefault();
            if (swiper.params.preventClicksPropagation && swiper.animating) {
              e.stopPropagation();
              e.stopImmediatePropagation();
            }
          }
        }
        function attachEvents() {
          var swiper = this;
          var params = swiper.params,
            touchEvents = swiper.touchEvents,
            el = swiper.el,
            wrapperEl = swiper.wrapperEl;
          {
            swiper.onTouchStart = onTouchStart.bind(swiper);
            swiper.onTouchMove = onTouchMove.bind(swiper);
            swiper.onTouchEnd = onTouchEnd.bind(swiper);
          }
          swiper.onClick = onClick.bind(swiper);
          var target = params.touchEventsTarget === 'container' ? el : wrapperEl;
          var capture = !!params.nested;

          // Touch Events
          {
            if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {
              target.addEventListener(touchEvents.start, swiper.onTouchStart, false);
              doc.addEventListener(touchEvents.move, swiper.onTouchMove, capture);
              doc.addEventListener(touchEvents.end, swiper.onTouchEnd, false);
            } else {
              if (Support.touch) {
                var passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? {
                  passive: true,
                  capture: false
                } : false;
                target.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
                target.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? {
                  passive: false,
                  capture: capture
                } : capture);
                target.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
              }
              if (params.simulateTouch && !Device.ios && !Device.android || params.simulateTouch && !Support.touch && Device.ios) {
                target.addEventListener('mousedown', swiper.onTouchStart, false);
                doc.addEventListener('mousemove', swiper.onTouchMove, capture);
                doc.addEventListener('mouseup', swiper.onTouchEnd, false);
              }
            }
            // Prevent Links Clicks
            if (params.preventClicks || params.preventClicksPropagation) {
              target.addEventListener('click', swiper.onClick, true);
            }
          }

          // Resize handler
          swiper.on(Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize, true);
        }
        function detachEvents() {
          var swiper = this;
          var params = swiper.params,
            touchEvents = swiper.touchEvents,
            el = swiper.el,
            wrapperEl = swiper.wrapperEl;
          var target = params.touchEventsTarget === 'container' ? el : wrapperEl;
          var capture = !!params.nested;

          // Touch Events
          {
            if (!Support.touch && (Support.pointerEvents || Support.prefixedPointerEvents)) {
              target.removeEventListener(touchEvents.start, swiper.onTouchStart, false);
              doc.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
              doc.removeEventListener(touchEvents.end, swiper.onTouchEnd, false);
            } else {
              if (Support.touch) {
                var passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? {
                  passive: true,
                  capture: false
                } : false;
                target.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener);
                target.removeEventListener(touchEvents.move, swiper.onTouchMove, capture);
                target.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener);
              }
              if (params.simulateTouch && !Device.ios && !Device.android || params.simulateTouch && !Support.touch && Device.ios) {
                target.removeEventListener('mousedown', swiper.onTouchStart, false);
                doc.removeEventListener('mousemove', swiper.onTouchMove, capture);
                doc.removeEventListener('mouseup', swiper.onTouchEnd, false);
              }
            }
            // Prevent Links Clicks
            if (params.preventClicks || params.preventClicksPropagation) {
              target.removeEventListener('click', swiper.onClick, true);
            }
          }

          // Resize handler
          swiper.off(Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate', onResize);
        }
        var events = {
          attachEvents: attachEvents,
          detachEvents: detachEvents
        };
        function setBreakpoint() {
          var swiper = this;
          var activeIndex = swiper.activeIndex,
            initialized = swiper.initialized,
            _swiper$loopedSlides = swiper.loopedSlides,
            loopedSlides = _swiper$loopedSlides === void 0 ? 0 : _swiper$loopedSlides,
            params = swiper.params;
          var breakpoints = params.breakpoints;
          if (!breakpoints || breakpoints && Object.keys(breakpoints).length === 0) return;

          // Set breakpoint for window width and update parameters
          var breakpoint = swiper.getBreakpoint(breakpoints);
          if (breakpoint && swiper.currentBreakpoint !== breakpoint) {
            var breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined;
            if (breakpointOnlyParams) {
              ['slidesPerView', 'spaceBetween', 'slidesPerGroup'].forEach(function (param) {
                var paramValue = breakpointOnlyParams[param];
                if (typeof paramValue === 'undefined') return;
                if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) {
                  breakpointOnlyParams[param] = 'auto';
                } else if (param === 'slidesPerView') {
                  breakpointOnlyParams[param] = parseFloat(paramValue);
                } else {
                  breakpointOnlyParams[param] = parseInt(paramValue, 10);
                }
              });
            }
            var breakpointParams = breakpointOnlyParams || swiper.originalParams;
            var directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction;
            var needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged);
            if (directionChanged && initialized) {
              swiper.changeDirection();
            }
            Utils.extend(swiper.params, breakpointParams);
            Utils.extend(swiper, {
              allowTouchMove: swiper.params.allowTouchMove,
              allowSlideNext: swiper.params.allowSlideNext,
              allowSlidePrev: swiper.params.allowSlidePrev
            });
            swiper.currentBreakpoint = breakpoint;
            if (needsReLoop && initialized) {
              swiper.loopDestroy();
              swiper.loopCreate();
              swiper.updateSlides();
              swiper.slideTo(activeIndex - loopedSlides + swiper.loopedSlides, 0, false);
            }
            swiper.emit('breakpoint', breakpointParams);
          }
        }
        function getBreakpoint(breakpoints) {
          var swiper = this;
          // Get breakpoint for window width
          if (!breakpoints) return undefined;
          var breakpoint = false;
          var points = [];
          Object.keys(breakpoints).forEach(function (point) {
            points.push(point);
          });
          points.sort(function (a, b) {
            return parseInt(a, 10) - parseInt(b, 10);
          });
          for (var i = 0; i < points.length; i += 1) {
            var point = points[i];
            if (swiper.params.breakpointsInverse) {
              if (point <= win.innerWidth) {
                breakpoint = point;
              }
            } else if (point >= win.innerWidth && !breakpoint) {
              breakpoint = point;
            }
          }
          return breakpoint || 'max';
        }
        var breakpoints = {
          setBreakpoint: setBreakpoint,
          getBreakpoint: getBreakpoint
        };
        function addClasses() {
          var swiper = this;
          var classNames = swiper.classNames,
            params = swiper.params,
            rtl = swiper.rtl,
            $el = swiper.$el;
          var suffixes = [];
          suffixes.push('initialized');
          suffixes.push(params.direction);
          if (params.freeMode) {
            suffixes.push('free-mode');
          }
          if (!Support.flexbox) {
            suffixes.push('no-flexbox');
          }
          if (params.autoHeight) {
            suffixes.push('autoheight');
          }
          if (rtl) {
            suffixes.push('rtl');
          }
          if (params.slidesPerColumn > 1) {
            suffixes.push('multirow');
          }
          if (Device.android) {
            suffixes.push('android');
          }
          if (Device.ios) {
            suffixes.push('ios');
          }
          // WP8 Touch Events Fix
          if ((Browser.isIE || Browser.isEdge) && (Support.pointerEvents || Support.prefixedPointerEvents)) {
            suffixes.push("wp8-".concat(params.direction));
          }
          suffixes.forEach(function (suffix) {
            classNames.push(params.containerModifierClass + suffix);
          });
          $el.addClass(classNames.join(' '));
        }
        function removeClasses() {
          var swiper = this;
          var $el = swiper.$el,
            classNames = swiper.classNames;
          $el.removeClass(classNames.join(' '));
        }
        var classes = {
          addClasses: addClasses,
          removeClasses: removeClasses
        };
        function loadImage(imageEl, src, srcset, sizes, checkForComplete, callback) {
          var image;
          function onReady() {
            if (callback) callback();
          }
          if (!imageEl.complete || !checkForComplete) {
            if (src) {
              image = new win.Image();
              image.onload = onReady;
              image.onerror = onReady;
              if (sizes) {
                image.sizes = sizes;
              }
              if (srcset) {
                image.srcset = srcset;
              }
              if (src) {
                image.src = src;
              }
            } else {
              onReady();
            }
          } else {
            // image already loaded...
            onReady();
          }
        }
        function preloadImages() {
          var swiper = this;
          swiper.imagesToLoad = swiper.$el.find('img');
          function onReady() {
            if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return;
            if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1;
            if (swiper.imagesLoaded === swiper.imagesToLoad.length) {
              if (swiper.params.updateOnImagesReady) swiper.update();
              swiper.emit('imagesReady');
            }
          }
          for (var i = 0; i < swiper.imagesToLoad.length; i += 1) {
            var imageEl = swiper.imagesToLoad[i];
            swiper.loadImage(imageEl, imageEl.currentSrc || imageEl.getAttribute('src'), imageEl.srcset || imageEl.getAttribute('srcset'), imageEl.sizes || imageEl.getAttribute('sizes'), true, onReady);
          }
        }
        var images = {
          loadImage: loadImage,
          preloadImages: preloadImages
        };
        function checkOverflow() {
          var swiper = this;
          var wasLocked = swiper.isLocked;
          swiper.isLocked = swiper.snapGrid.length === 1;
          swiper.allowSlideNext = !swiper.isLocked;
          swiper.allowSlidePrev = !swiper.isLocked;

          // events
          if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock');
          if (wasLocked && wasLocked !== swiper.isLocked) {
            swiper.isEnd = false;
            swiper.navigation.update();
          }
        }
        var checkOverflow$1 = {
          checkOverflow: checkOverflow
        };
        var defaults = {
          init: true,
          direction: 'horizontal',
          touchEventsTarget: 'container',
          initialSlide: 0,
          speed: 300,
          //
          preventInteractionOnTransition: false,
          // To support iOS's swipe-to-go-back gesture (when being used in-app, with UIWebView).
          edgeSwipeDetection: false,
          edgeSwipeThreshold: 20,
          // Free mode
          freeMode: false,
          freeModeMomentum: true,
          freeModeMomentumRatio: 1,
          freeModeMomentumBounce: true,
          freeModeMomentumBounceRatio: 1,
          freeModeMomentumVelocityRatio: 1,
          freeModeSticky: false,
          freeModeMinimumVelocity: 0.02,
          // Autoheight
          autoHeight: false,
          // Set wrapper width
          setWrapperSize: false,
          // Virtual Translate
          virtualTranslate: false,
          // Effects
          effect: 'slide',
          // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip'

          // Breakpoints
          breakpoints: undefined,
          breakpointsInverse: false,
          // Slides grid
          spaceBetween: 0,
          slidesPerView: 1,
          slidesPerColumn: 1,
          slidesPerColumnFill: 'column',
          slidesPerGroup: 1,
          centeredSlides: false,
          slidesOffsetBefore: 0,
          // in px
          slidesOffsetAfter: 0,
          // in px
          normalizeSlideIndex: true,
          centerInsufficientSlides: false,
          // Disable swiper and hide navigation when container not overflow
          watchOverflow: false,
          // Round length
          roundLengths: false,
          // Touches
          touchRatio: 1,
          touchAngle: 45,
          simulateTouch: true,
          shortSwipes: true,
          longSwipes: true,
          longSwipesRatio: 0.5,
          longSwipesMs: 300,
          followFinger: true,
          allowTouchMove: true,
          threshold: 0,
          touchMoveStopPropagation: true,
          touchStartPreventDefault: true,
          touchStartForcePreventDefault: false,
          touchReleaseOnEdges: false,
          // Unique Navigation Elements
          uniqueNavElements: true,
          // Resistance
          resistance: true,
          resistanceRatio: 0.85,
          // Progress
          watchSlidesProgress: false,
          watchSlidesVisibility: false,
          // Cursor
          grabCursor: false,
          // Clicks
          preventClicks: true,
          preventClicksPropagation: true,
          slideToClickedSlide: false,
          // Images
          preloadImages: true,
          updateOnImagesReady: true,
          // loop
          loop: false,
          loopAdditionalSlides: 0,
          loopedSlides: null,
          loopFillGroupWithBlank: false,
          // Swiping/no swiping
          allowSlidePrev: true,
          allowSlideNext: true,
          swipeHandler: null,
          // '.swipe-handler',
          noSwiping: true,
          noSwipingClass: 'swiper-no-swiping',
          noSwipingSelector: null,
          // Passive Listeners
          passiveListeners: true,
          // NS
          containerModifierClass: 'swiper-container-',
          // NEW
          slideClass: 'swiper-slide',
          slideBlankClass: 'swiper-slide-invisible-blank',
          slideActiveClass: 'swiper-slide-active',
          slideDuplicateActiveClass: 'swiper-slide-duplicate-active',
          slideVisibleClass: 'swiper-slide-visible',
          slideDuplicateClass: 'swiper-slide-duplicate',
          slideNextClass: 'swiper-slide-next',
          slideDuplicateNextClass: 'swiper-slide-duplicate-next',
          slidePrevClass: 'swiper-slide-prev',
          slideDuplicatePrevClass: 'swiper-slide-duplicate-prev',
          wrapperClass: 'swiper-wrapper',
          // Callbacks
          runCallbacksOnInit: true
        };

        /* eslint no-param-reassign: "off" */

        var prototypes = {
          update: update,
          translate: translate,
          transition: transition,
          slide: slide,
          loop: loop,
          grabCursor: grabCursor,
          manipulation: manipulation,
          events: events,
          breakpoints: breakpoints,
          checkOverflow: checkOverflow$1,
          classes: classes,
          images: images
        };
        var extendedDefaults = {};
        var Swiper = /*#__PURE__*/function (_SwiperClass) {
          _inherits(Swiper, _SwiperClass);
          var _super = _createSuper(Swiper);
          function Swiper() {
            var _this;
            _classCallCheck(this, Swiper);
            var el;
            var params;
            for (var _len9 = arguments.length, args = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
              args[_key9] = arguments[_key9];
            }
            if (args.length === 1 && args[0].constructor && args[0].constructor === Object) {
              params = args[0];
            } else {
              el = args[0];
              params = args[1];
            }
            if (!params) params = {};
            params = Utils.extend({}, params);
            if (el && !params.el) params.el = el;
            _this = _super.call(this, params);
            Object.keys(prototypes).forEach(function (prototypeGroup) {
              Object.keys(prototypes[prototypeGroup]).forEach(function (protoMethod) {
                if (!Swiper.prototype[protoMethod]) {
                  Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod];
                }
              });
            });

            // Swiper Instance
            var swiper = _assertThisInitialized(_this);
            if (typeof swiper.modules === 'undefined') {
              swiper.modules = {};
            }
            Object.keys(swiper.modules).forEach(function (moduleName) {
              var module = swiper.modules[moduleName];
              if (module.params) {
                var moduleParamName = Object.keys(module.params)[0];
                var moduleParams = module.params[moduleParamName];
                if (_typeof(moduleParams) !== 'object' || moduleParams === null) return;
                if (!(moduleParamName in params && 'enabled' in moduleParams)) return;
                if (params[moduleParamName] === true) {
                  params[moduleParamName] = {
                    enabled: true
                  };
                }
                if (_typeof(params[moduleParamName]) === 'object' && !('enabled' in params[moduleParamName])) {
                  params[moduleParamName].enabled = true;
                }
                if (!params[moduleParamName]) params[moduleParamName] = {
                  enabled: false
                };
              }
            });

            // Extend defaults with modules params
            var swiperParams = Utils.extend({}, defaults);
            swiper.useModulesParams(swiperParams);

            // Extend defaults with passed params
            swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params);
            swiper.originalParams = Utils.extend({}, swiper.params);
            swiper.passedParams = Utils.extend({}, params);

            // Save Dom lib
            swiper.$ = $;

            // Find el
            var $el = $(swiper.params.el);
            el = $el[0];
            if (!el) {
              return _possibleConstructorReturn(_this, undefined);
            }
            if ($el.length > 1) {
              var swipers = [];
              $el.each(function (index, containerEl) {
                var newParams = Utils.extend({}, params, {
                  el: containerEl
                });
                swipers.push(new Swiper(newParams));
              });
              return _possibleConstructorReturn(_this, swipers);
            }
            el.swiper = swiper;
            $el.data('swiper', swiper);

            // Find Wrapper
            var $wrapperEl = $el.children(".".concat(swiper.params.wrapperClass));

            // Extend Swiper
            Utils.extend(swiper, {
              $el: $el,
              el: el,
              $wrapperEl: $wrapperEl,
              wrapperEl: $wrapperEl[0],
              // Classes
              classNames: [],
              // Slides
              slides: $(),
              slidesGrid: [],
              snapGrid: [],
              slidesSizesGrid: [],
              // isDirection
              isHorizontal: function isHorizontal() {
                return swiper.params.direction === 'horizontal';
              },
              isVertical: function isVertical() {
                return swiper.params.direction === 'vertical';
              },
              // RTL
              rtl: el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl',
              rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'),
              wrongRTL: $wrapperEl.css('display') === '-webkit-box',
              // Indexes
              activeIndex: 0,
              realIndex: 0,
              //
              isBeginning: true,
              isEnd: false,
              // Props
              translate: 0,
              previousTranslate: 0,
              progress: 0,
              velocity: 0,
              animating: false,
              // Locks
              allowSlideNext: swiper.params.allowSlideNext,
              allowSlidePrev: swiper.params.allowSlidePrev,
              // Touch Events
              touchEvents: function touchEvents() {
                var touch = ['touchstart', 'touchmove', 'touchend'];
                var desktop = ['mousedown', 'mousemove', 'mouseup'];
                if (Support.pointerEvents) {
                  desktop = ['pointerdown', 'pointermove', 'pointerup'];
                } else if (Support.prefixedPointerEvents) {
                  desktop = ['MSPointerDown', 'MSPointerMove', 'MSPointerUp'];
                }
                swiper.touchEventsTouch = {
                  start: touch[0],
                  move: touch[1],
                  end: touch[2]
                };
                swiper.touchEventsDesktop = {
                  start: desktop[0],
                  move: desktop[1],
                  end: desktop[2]
                };
                return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop;
              }(),
              touchEventsData: {
                isTouched: undefined,
                isMoved: undefined,
                allowTouchCallbacks: undefined,
                touchStartTime: undefined,
                isScrolling: undefined,
                currentTranslate: undefined,
                startTranslate: undefined,
                allowThresholdMove: undefined,
                // Form elements to match
                formElements: 'input, select, option, textarea, button, video',
                // Last click time
                lastClickTime: Utils.now(),
                clickTimeout: undefined,
                // Velocities
                velocities: [],
                allowMomentumBounce: undefined,
                isTouchEvent: undefined,
                startMoving: undefined
              },
              // Clicks
              allowClick: true,
              // Touches
              allowTouchMove: swiper.params.allowTouchMove,
              touches: {
                startX: 0,
                startY: 0,
                currentX: 0,
                currentY: 0,
                diff: 0
              },
              // Images
              imagesToLoad: [],
              imagesLoaded: 0
            });

            // Install Modules
            swiper.useModules();

            // Init
            if (swiper.params.init) {
              swiper.init();
            }

            // Return app instance
            return _possibleConstructorReturn(_this, swiper);
          }
          _createClass(Swiper, [{
            key: "slidesPerViewDynamic",
            value: function slidesPerViewDynamic() {
              var swiper = this;
              var params = swiper.params,
                slides = swiper.slides,
                slidesGrid = swiper.slidesGrid,
                swiperSize = swiper.size,
                activeIndex = swiper.activeIndex;
              var spv = 1;
              if (params.centeredSlides) {
                var slideSize = slides[activeIndex].swiperSlideSize;
                var breakLoop;
                for (var i = activeIndex + 1; i < slides.length; i += 1) {
                  if (slides[i] && !breakLoop) {
                    slideSize += slides[i].swiperSlideSize;
                    spv += 1;
                    if (slideSize > swiperSize) breakLoop = true;
                  }
                }
                for (var _i7 = activeIndex - 1; _i7 >= 0; _i7 -= 1) {
                  if (slides[_i7] && !breakLoop) {
                    slideSize += slides[_i7].swiperSlideSize;
                    spv += 1;
                    if (slideSize > swiperSize) breakLoop = true;
                  }
                }
              } else {
                for (var _i8 = activeIndex + 1; _i8 < slides.length; _i8 += 1) {
                  if (slidesGrid[_i8] - slidesGrid[activeIndex] < swiperSize) {
                    spv += 1;
                  }
                }
              }
              return spv;
            }
          }, {
            key: "update",
            value: function update() {
              var swiper = this;
              if (!swiper || swiper.destroyed) return;
              var snapGrid = swiper.snapGrid,
                params = swiper.params;
              // Breakpoints
              if (params.breakpoints) {
                swiper.setBreakpoint();
              }
              swiper.updateSize();
              swiper.updateSlides();
              swiper.updateProgress();
              swiper.updateSlidesClasses();
              function setTranslate() {
                var translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate;
                var newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate());
                swiper.setTranslate(newTranslate);
                swiper.updateActiveIndex();
                swiper.updateSlidesClasses();
              }
              var translated;
              if (swiper.params.freeMode) {
                setTranslate();
                if (swiper.params.autoHeight) {
                  swiper.updateAutoHeight();
                }
              } else {
                if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) {
                  translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true);
                } else {
                  translated = swiper.slideTo(swiper.activeIndex, 0, false, true);
                }
                if (!translated) {
                  setTranslate();
                }
              }
              if (params.watchOverflow && snapGrid !== swiper.snapGrid) {
                swiper.checkOverflow();
              }
              swiper.emit('update');
            }
          }, {
            key: "changeDirection",
            value: function changeDirection(newDirection) {
              var needUpdate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
              var swiper = this;
              var currentDirection = swiper.params.direction;
              if (!newDirection) {
                // eslint-disable-next-line
                newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal';
              }
              if (newDirection === currentDirection || newDirection !== 'horizontal' && newDirection !== 'vertical') {
                return swiper;
              }
              swiper.$el.removeClass("".concat(swiper.params.containerModifierClass).concat(currentDirection, " wp8-").concat(currentDirection)).addClass("".concat(swiper.params.containerModifierClass).concat(newDirection));
              if ((Browser.isIE || Browser.isEdge) && (Support.pointerEvents || Support.prefixedPointerEvents)) {
                swiper.$el.addClass("".concat(swiper.params.containerModifierClass, "wp8-").concat(newDirection));
              }
              swiper.params.direction = newDirection;
              swiper.slides.each(function (slideIndex, slideEl) {
                if (newDirection === 'vertical') {
                  slideEl.style.width = '';
                } else {
                  slideEl.style.height = '';
                }
              });
              swiper.emit('changeDirection');
              if (needUpdate) swiper.update();
              return swiper;
            }
          }, {
            key: "init",
            value: function init() {
              var swiper = this;
              if (swiper.initialized) return;
              swiper.emit('beforeInit');

              // Set breakpoint
              if (swiper.params.breakpoints) {
                swiper.setBreakpoint();
              }

              // Add Classes
              swiper.addClasses();

              // Create loop
              if (swiper.params.loop) {
                swiper.loopCreate();
              }

              // Update size
              swiper.updateSize();

              // Update slides
              swiper.updateSlides();
              if (swiper.params.watchOverflow) {
                swiper.checkOverflow();
              }

              // Set Grab Cursor
              if (swiper.params.grabCursor) {
                swiper.setGrabCursor();
              }
              if (swiper.params.preloadImages) {
                swiper.preloadImages();
              }

              // Slide To Initial Slide
              if (swiper.params.loop) {
                swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit);
              } else {
                swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit);
              }

              // Attach events
              swiper.attachEvents();

              // Init Flag
              swiper.initialized = true;

              // Emit
              swiper.emit('init');
            }
          }, {
            key: "destroy",
            value: function destroy() {
              var deleteInstance = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
              var cleanStyles = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
              var swiper = this;
              var params = swiper.params,
                $el = swiper.$el,
                $wrapperEl = swiper.$wrapperEl,
                slides = swiper.slides;
              if (typeof swiper.params === 'undefined' || swiper.destroyed) {
                return null;
              }
              swiper.emit('beforeDestroy');

              // Init Flag
              swiper.initialized = false;

              // Detach events
              swiper.detachEvents();

              // Destroy loop
              if (params.loop) {
                swiper.loopDestroy();
              }

              // Cleanup styles
              if (cleanStyles) {
                swiper.removeClasses();
                $el.removeAttr('style');
                $wrapperEl.removeAttr('style');
                if (slides && slides.length) {
                  slides.removeClass([params.slideVisibleClass, params.slideActiveClass, params.slideNextClass, params.slidePrevClass].join(' ')).removeAttr('style').removeAttr('data-swiper-slide-index').removeAttr('data-swiper-column').removeAttr('data-swiper-row');
                }
              }
              swiper.emit('destroy');

              // Detach emitter events
              Object.keys(swiper.eventsListeners).forEach(function (eventName) {
                swiper.off(eventName);
              });
              if (deleteInstance !== false) {
                swiper.$el[0].swiper = null;
                swiper.$el.data('swiper', null);
                Utils.deleteProps(swiper);
              }
              swiper.destroyed = true;
              return null;
            }
          }], [{
            key: "extendDefaults",
            value: function extendDefaults(newDefaults) {
              Utils.extend(extendedDefaults, newDefaults);
            }
          }, {
            key: "extendedDefaults",
            get: function get() {
              return extendedDefaults;
            }
          }, {
            key: "defaults",
            get: function get() {
              return defaults;
            }
          }, {
            key: "Class",
            get: function get() {
              return SwiperClass;
            }
          }, {
            key: "$",
            get: function get() {
              return $;
            }
          }]);
          return Swiper;
        }(SwiperClass);
        var Device$1 = {
          name: 'device',
          proto: {
            device: Device
          },
          static: {
            device: Device
          }
        };
        var Support$1 = {
          name: 'support',
          proto: {
            support: Support
          },
          static: {
            support: Support
          }
        };
        var Browser$1 = {
          name: 'browser',
          proto: {
            browser: Browser
          },
          static: {
            browser: Browser
          }
        };
        var Resize = {
          name: 'resize',
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              resize: {
                resizeHandler: function resizeHandler() {
                  if (!swiper || swiper.destroyed || !swiper.initialized) return;
                  swiper.emit('beforeResize');
                  swiper.emit('resize');
                },
                orientationChangeHandler: function orientationChangeHandler() {
                  if (!swiper || swiper.destroyed || !swiper.initialized) return;
                  swiper.emit('orientationchange');
                }
              }
            });
          },
          on: {
            init: function init() {
              var swiper = this;
              // Emit resize
              win.addEventListener('resize', swiper.resize.resizeHandler);

              // Emit orientationchange
              win.addEventListener('orientationchange', swiper.resize.orientationChangeHandler);
            },
            destroy: function destroy() {
              var swiper = this;
              win.removeEventListener('resize', swiper.resize.resizeHandler);
              win.removeEventListener('orientationchange', swiper.resize.orientationChangeHandler);
            }
          }
        };
        var Observer = {
          func: win.MutationObserver || win.WebkitMutationObserver,
          attach: function attach(target) {
            var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
            var swiper = this;
            var ObserverFunc = Observer.func;
            var observer = new ObserverFunc(function (mutations) {
              // The observerUpdate event should only be triggered
              // once despite the number of mutations.  Additional
              // triggers are redundant and are very costly
              if (mutations.length === 1) {
                swiper.emit('observerUpdate', mutations[0]);
                return;
              }
              var observerUpdate = function observerUpdate() {
                swiper.emit('observerUpdate', mutations[0]);
              };
              if (win.requestAnimationFrame) {
                win.requestAnimationFrame(observerUpdate);
              } else {
                win.setTimeout(observerUpdate, 0);
              }
            });
            observer.observe(target, {
              attributes: typeof options.attributes === 'undefined' ? true : options.attributes,
              childList: typeof options.childList === 'undefined' ? true : options.childList,
              characterData: typeof options.characterData === 'undefined' ? true : options.characterData
            });
            swiper.observer.observers.push(observer);
          },
          init: function init() {
            var swiper = this;
            if (!Support.observer || !swiper.params.observer) return;
            if (swiper.params.observeParents) {
              var containerParents = swiper.$el.parents();
              for (var i = 0; i < containerParents.length; i += 1) {
                swiper.observer.attach(containerParents[i]);
              }
            }
            // Observe container
            swiper.observer.attach(swiper.$el[0], {
              childList: swiper.params.observeSlideChildren
            });

            // Observe wrapper
            swiper.observer.attach(swiper.$wrapperEl[0], {
              attributes: false
            });
          },
          destroy: function destroy() {
            var swiper = this;
            swiper.observer.observers.forEach(function (observer) {
              observer.disconnect();
            });
            swiper.observer.observers = [];
          }
        };
        var Observer$1 = {
          name: 'observer',
          params: {
            observer: false,
            observeParents: false,
            observeSlideChildren: false
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              observer: {
                init: Observer.init.bind(swiper),
                attach: Observer.attach.bind(swiper),
                destroy: Observer.destroy.bind(swiper),
                observers: []
              }
            });
          },
          on: {
            init: function init() {
              var swiper = this;
              swiper.observer.init();
            },
            destroy: function destroy() {
              var swiper = this;
              swiper.observer.destroy();
            }
          }
        };
        var Virtual = {
          update: function update(force) {
            var swiper = this;
            var _swiper$params = swiper.params,
              slidesPerView = _swiper$params.slidesPerView,
              slidesPerGroup = _swiper$params.slidesPerGroup,
              centeredSlides = _swiper$params.centeredSlides;
            var _swiper$params$virtua = swiper.params.virtual,
              addSlidesBefore = _swiper$params$virtua.addSlidesBefore,
              addSlidesAfter = _swiper$params$virtua.addSlidesAfter;
            var _swiper$virtual = swiper.virtual,
              previousFrom = _swiper$virtual.from,
              previousTo = _swiper$virtual.to,
              slides = _swiper$virtual.slides,
              previousSlidesGrid = _swiper$virtual.slidesGrid,
              renderSlide = _swiper$virtual.renderSlide,
              previousOffset = _swiper$virtual.offset;
            swiper.updateActiveIndex();
            var activeIndex = swiper.activeIndex || 0;
            var offsetProp;
            if (swiper.rtlTranslate) offsetProp = 'right';else offsetProp = swiper.isHorizontal() ? 'left' : 'top';
            var slidesAfter;
            var slidesBefore;
            if (centeredSlides) {
              slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore;
              slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter;
            } else {
              slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore;
              slidesBefore = slidesPerGroup + addSlidesAfter;
            }
            var from = Math.max((activeIndex || 0) - slidesBefore, 0);
            var to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1);
            var offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0);
            Utils.extend(swiper.virtual, {
              from: from,
              to: to,
              offset: offset,
              slidesGrid: swiper.slidesGrid
            });
            function onRendered() {
              swiper.updateSlides();
              swiper.updateProgress();
              swiper.updateSlidesClasses();
              if (swiper.lazy && swiper.params.lazy.enabled) {
                swiper.lazy.load();
              }
            }
            if (previousFrom === from && previousTo === to && !force) {
              if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) {
                swiper.slides.css(offsetProp, "".concat(offset, "px"));
              }
              swiper.updateProgress();
              return;
            }
            if (swiper.params.virtual.renderExternal) {
              swiper.params.virtual.renderExternal.call(swiper, {
                offset: offset,
                from: from,
                to: to,
                slides: function getSlides() {
                  var slidesToRender = [];
                  for (var i = from; i <= to; i += 1) {
                    slidesToRender.push(slides[i]);
                  }
                  return slidesToRender;
                }()
              });
              onRendered();
              return;
            }
            var prependIndexes = [];
            var appendIndexes = [];
            if (force) {
              swiper.$wrapperEl.find(".".concat(swiper.params.slideClass)).remove();
            } else {
              for (var i = previousFrom; i <= previousTo; i += 1) {
                if (i < from || i > to) {
                  swiper.$wrapperEl.find(".".concat(swiper.params.slideClass, "[data-swiper-slide-index=\"").concat(i, "\"]")).remove();
                }
              }
            }
            for (var _i9 = 0; _i9 < slides.length; _i9 += 1) {
              if (_i9 >= from && _i9 <= to) {
                if (typeof previousTo === 'undefined' || force) {
                  appendIndexes.push(_i9);
                } else {
                  if (_i9 > previousTo) appendIndexes.push(_i9);
                  if (_i9 < previousFrom) prependIndexes.push(_i9);
                }
              }
            }
            appendIndexes.forEach(function (index) {
              swiper.$wrapperEl.append(renderSlide(slides[index], index));
            });
            prependIndexes.sort(function (a, b) {
              return b - a;
            }).forEach(function (index) {
              swiper.$wrapperEl.prepend(renderSlide(slides[index], index));
            });
            swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, "".concat(offset, "px"));
            onRendered();
          },
          renderSlide: function renderSlide(slide, index) {
            var swiper = this;
            var params = swiper.params.virtual;
            if (params.cache && swiper.virtual.cache[index]) {
              return swiper.virtual.cache[index];
            }
            var $slideEl = params.renderSlide ? $(params.renderSlide.call(swiper, slide, index)) : $("<div class=\"".concat(swiper.params.slideClass, "\" data-swiper-slide-index=\"").concat(index, "\">").concat(slide, "</div>"));
            if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index);
            if (params.cache) swiper.virtual.cache[index] = $slideEl;
            return $slideEl;
          },
          appendSlide: function appendSlide(slides) {
            var swiper = this;
            if (_typeof(slides) === 'object' && 'length' in slides) {
              for (var i = 0; i < slides.length; i += 1) {
                if (slides[i]) swiper.virtual.slides.push(slides[i]);
              }
            } else {
              swiper.virtual.slides.push(slides);
            }
            swiper.virtual.update(true);
          },
          prependSlide: function prependSlide(slides) {
            var swiper = this;
            var activeIndex = swiper.activeIndex;
            var newActiveIndex = activeIndex + 1;
            var numberOfNewSlides = 1;
            if (Array.isArray(slides)) {
              for (var i = 0; i < slides.length; i += 1) {
                if (slides[i]) swiper.virtual.slides.unshift(slides[i]);
              }
              newActiveIndex = activeIndex + slides.length;
              numberOfNewSlides = slides.length;
            } else {
              swiper.virtual.slides.unshift(slides);
            }
            if (swiper.params.virtual.cache) {
              var cache = swiper.virtual.cache;
              var newCache = {};
              Object.keys(cache).forEach(function (cachedIndex) {
                newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = cache[cachedIndex];
              });
              swiper.virtual.cache = newCache;
            }
            swiper.virtual.update(true);
            swiper.slideTo(newActiveIndex, 0);
          },
          removeSlide: function removeSlide(slidesIndexes) {
            var swiper = this;
            if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return;
            var activeIndex = swiper.activeIndex;
            if (Array.isArray(slidesIndexes)) {
              for (var i = slidesIndexes.length - 1; i >= 0; i -= 1) {
                swiper.virtual.slides.splice(slidesIndexes[i], 1);
                if (swiper.params.virtual.cache) {
                  delete swiper.virtual.cache[slidesIndexes[i]];
                }
                if (slidesIndexes[i] < activeIndex) activeIndex -= 1;
                activeIndex = Math.max(activeIndex, 0);
              }
            } else {
              swiper.virtual.slides.splice(slidesIndexes, 1);
              if (swiper.params.virtual.cache) {
                delete swiper.virtual.cache[slidesIndexes];
              }
              if (slidesIndexes < activeIndex) activeIndex -= 1;
              activeIndex = Math.max(activeIndex, 0);
            }
            swiper.virtual.update(true);
            swiper.slideTo(activeIndex, 0);
          },
          removeAllSlides: function removeAllSlides() {
            var swiper = this;
            swiper.virtual.slides = [];
            if (swiper.params.virtual.cache) {
              swiper.virtual.cache = {};
            }
            swiper.virtual.update(true);
            swiper.slideTo(0, 0);
          }
        };
        var Virtual$1 = {
          name: 'virtual',
          params: {
            virtual: {
              enabled: false,
              slides: [],
              cache: true,
              renderSlide: null,
              renderExternal: null,
              addSlidesBefore: 0,
              addSlidesAfter: 0
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              virtual: {
                update: Virtual.update.bind(swiper),
                appendSlide: Virtual.appendSlide.bind(swiper),
                prependSlide: Virtual.prependSlide.bind(swiper),
                removeSlide: Virtual.removeSlide.bind(swiper),
                removeAllSlides: Virtual.removeAllSlides.bind(swiper),
                renderSlide: Virtual.renderSlide.bind(swiper),
                slides: swiper.params.virtual.slides,
                cache: {}
              }
            });
          },
          on: {
            beforeInit: function beforeInit() {
              var swiper = this;
              if (!swiper.params.virtual.enabled) return;
              swiper.classNames.push("".concat(swiper.params.containerModifierClass, "virtual"));
              var overwriteParams = {
                watchSlidesProgress: true
              };
              Utils.extend(swiper.params, overwriteParams);
              Utils.extend(swiper.originalParams, overwriteParams);
              if (!swiper.params.initialSlide) {
                swiper.virtual.update();
              }
            },
            setTranslate: function setTranslate() {
              var swiper = this;
              if (!swiper.params.virtual.enabled) return;
              swiper.virtual.update();
            }
          }
        };
        var Keyboard = {
          handle: function handle(event) {
            var swiper = this;
            var rtl = swiper.rtlTranslate;
            var e = event;
            if (e.originalEvent) e = e.originalEvent; // jquery fix
            var kc = e.keyCode || e.charCode;
            // Directions locks
            if (!swiper.allowSlideNext && (swiper.isHorizontal() && kc === 39 || swiper.isVertical() && kc === 40 || kc === 34)) {
              return false;
            }
            if (!swiper.allowSlidePrev && (swiper.isHorizontal() && kc === 37 || swiper.isVertical() && kc === 38 || kc === 33)) {
              return false;
            }
            if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) {
              return undefined;
            }
            if (doc.activeElement && doc.activeElement.nodeName && (doc.activeElement.nodeName.toLowerCase() === 'input' || doc.activeElement.nodeName.toLowerCase() === 'textarea')) {
              return undefined;
            }
            if (swiper.params.keyboard.onlyInViewport && (kc === 33 || kc === 34 || kc === 37 || kc === 39 || kc === 38 || kc === 40)) {
              var inView = false;
              // Check that swiper should be inside of visible area of window
              if (swiper.$el.parents(".".concat(swiper.params.slideClass)).length > 0 && swiper.$el.parents(".".concat(swiper.params.slideActiveClass)).length === 0) {
                return undefined;
              }
              var windowWidth = win.innerWidth;
              var windowHeight = win.innerHeight;
              var swiperOffset = swiper.$el.offset();
              if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft;
              var swiperCoord = [[swiperOffset.left, swiperOffset.top], [swiperOffset.left + swiper.width, swiperOffset.top], [swiperOffset.left, swiperOffset.top + swiper.height], [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height]];
              for (var i = 0; i < swiperCoord.length; i += 1) {
                var point = swiperCoord[i];
                if (point[0] >= 0 && point[0] <= windowWidth && point[1] >= 0 && point[1] <= windowHeight) {
                  inView = true;
                }
              }
              if (!inView) return undefined;
            }
            if (swiper.isHorizontal()) {
              if (kc === 33 || kc === 34 || kc === 37 || kc === 39) {
                if (e.preventDefault) e.preventDefault();else e.returnValue = false;
              }
              if ((kc === 34 || kc === 39) && !rtl || (kc === 33 || kc === 37) && rtl) swiper.slideNext();
              if ((kc === 33 || kc === 37) && !rtl || (kc === 34 || kc === 39) && rtl) swiper.slidePrev();
            } else {
              if (kc === 33 || kc === 34 || kc === 38 || kc === 40) {
                if (e.preventDefault) e.preventDefault();else e.returnValue = false;
              }
              if (kc === 34 || kc === 40) swiper.slideNext();
              if (kc === 33 || kc === 38) swiper.slidePrev();
            }
            swiper.emit('keyPress', kc);
            return undefined;
          },
          enable: function enable() {
            var swiper = this;
            if (swiper.keyboard.enabled) return;
            $(doc).on('keydown', swiper.keyboard.handle);
            swiper.keyboard.enabled = true;
          },
          disable: function disable() {
            var swiper = this;
            if (!swiper.keyboard.enabled) return;
            $(doc).off('keydown', swiper.keyboard.handle);
            swiper.keyboard.enabled = false;
          }
        };
        var Keyboard$1 = {
          name: 'keyboard',
          params: {
            keyboard: {
              enabled: false,
              onlyInViewport: true
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              keyboard: {
                enabled: false,
                enable: Keyboard.enable.bind(swiper),
                disable: Keyboard.disable.bind(swiper),
                handle: Keyboard.handle.bind(swiper)
              }
            });
          },
          on: {
            init: function init() {
              var swiper = this;
              if (swiper.params.keyboard.enabled) {
                swiper.keyboard.enable();
              }
            },
            destroy: function destroy() {
              var swiper = this;
              if (swiper.keyboard.enabled) {
                swiper.keyboard.disable();
              }
            }
          }
        };
        function isEventSupported() {
          var eventName = 'onwheel';
          var isSupported = (eventName in doc);
          if (!isSupported) {
            var element = doc.createElement('div');
            element.setAttribute(eventName, 'return;');
            isSupported = typeof element[eventName] === 'function';
          }
          if (!isSupported && doc.implementation && doc.implementation.hasFeature
          // always returns true in newer browsers as per the standard.
          // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
          && doc.implementation.hasFeature('', '') !== true) {
            // This is the only way to test support for the `wheel` event in IE9+.
            isSupported = doc.implementation.hasFeature('Events.wheel', '3.0');
          }
          return isSupported;
        }
        var Mousewheel = {
          lastScrollTime: Utils.now(),
          event: function getEvent() {
            if (win.navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll';
            return isEventSupported() ? 'wheel' : 'mousewheel';
          }(),
          normalize: function normalize(e) {
            // Reasonable defaults
            var PIXEL_STEP = 10;
            var LINE_HEIGHT = 40;
            var PAGE_HEIGHT = 800;
            var sX = 0;
            var sY = 0; // spinX, spinY
            var pX = 0;
            var pY = 0; // pixelX, pixelY

            // Legacy
            if ('detail' in e) {
              sY = e.detail;
            }
            if ('wheelDelta' in e) {
              sY = -e.wheelDelta / 120;
            }
            if ('wheelDeltaY' in e) {
              sY = -e.wheelDeltaY / 120;
            }
            if ('wheelDeltaX' in e) {
              sX = -e.wheelDeltaX / 120;
            }

            // side scrolling on FF with DOMMouseScroll
            if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) {
              sX = sY;
              sY = 0;
            }
            pX = sX * PIXEL_STEP;
            pY = sY * PIXEL_STEP;
            if ('deltaY' in e) {
              pY = e.deltaY;
            }
            if ('deltaX' in e) {
              pX = e.deltaX;
            }
            if ((pX || pY) && e.deltaMode) {
              if (e.deltaMode === 1) {
                // delta in LINE units
                pX *= LINE_HEIGHT;
                pY *= LINE_HEIGHT;
              } else {
                // delta in PAGE units
                pX *= PAGE_HEIGHT;
                pY *= PAGE_HEIGHT;
              }
            }

            // Fall-back if spin cannot be determined
            if (pX && !sX) {
              sX = pX < 1 ? -1 : 1;
            }
            if (pY && !sY) {
              sY = pY < 1 ? -1 : 1;
            }
            return {
              spinX: sX,
              spinY: sY,
              pixelX: pX,
              pixelY: pY
            };
          },
          handleMouseEnter: function handleMouseEnter() {
            var swiper = this;
            swiper.mouseEntered = true;
          },
          handleMouseLeave: function handleMouseLeave() {
            var swiper = this;
            swiper.mouseEntered = false;
          },
          handle: function handle(event) {
            var e = event;
            var swiper = this;
            var params = swiper.params.mousewheel;
            if (!swiper.mouseEntered && !params.releaseOnEdges) return true;
            if (e.originalEvent) e = e.originalEvent; // jquery fix
            var delta = 0;
            var rtlFactor = swiper.rtlTranslate ? -1 : 1;
            var data = Mousewheel.normalize(e);
            if (params.forceToAxis) {
              if (swiper.isHorizontal()) {
                if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = data.pixelX * rtlFactor;else return true;
              } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = data.pixelY;else return true;
            } else {
              delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY;
            }
            if (delta === 0) return true;
            if (params.invert) delta = -delta;
            if (!swiper.params.freeMode) {
              if (Utils.now() - swiper.mousewheel.lastScrollTime > 60) {
                if (delta < 0) {
                  if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) {
                    swiper.slideNext();
                    swiper.emit('scroll', e);
                  } else if (params.releaseOnEdges) return true;
                } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) {
                  swiper.slidePrev();
                  swiper.emit('scroll', e);
                } else if (params.releaseOnEdges) return true;
              }
              swiper.mousewheel.lastScrollTime = new win.Date().getTime();
            } else {
              // Freemode or scrollContainer:
              if (swiper.params.loop) {
                swiper.loopFix();
              }
              var position = swiper.getTranslate() + delta * params.sensitivity;
              var wasBeginning = swiper.isBeginning;
              var wasEnd = swiper.isEnd;
              if (position >= swiper.minTranslate()) position = swiper.minTranslate();
              if (position <= swiper.maxTranslate()) position = swiper.maxTranslate();
              swiper.setTransition(0);
              swiper.setTranslate(position);
              swiper.updateProgress();
              swiper.updateActiveIndex();
              swiper.updateSlidesClasses();
              if (!wasBeginning && swiper.isBeginning || !wasEnd && swiper.isEnd) {
                swiper.updateSlidesClasses();
              }
              if (swiper.params.freeModeSticky) {
                clearTimeout(swiper.mousewheel.timeout);
                swiper.mousewheel.timeout = Utils.nextTick(function () {
                  swiper.slideToClosest();
                }, 300);
              }
              // Emit event
              swiper.emit('scroll', e);

              // Stop autoplay
              if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop();
              // Return page scroll on edge positions
              if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true;
            }
            if (e.preventDefault) e.preventDefault();else e.returnValue = false;
            return false;
          },
          enable: function enable() {
            var swiper = this;
            if (!Mousewheel.event) return false;
            if (swiper.mousewheel.enabled) return false;
            var target = swiper.$el;
            if (swiper.params.mousewheel.eventsTarged !== 'container') {
              target = $(swiper.params.mousewheel.eventsTarged);
            }
            target.on('mouseenter', swiper.mousewheel.handleMouseEnter);
            target.on('mouseleave', swiper.mousewheel.handleMouseLeave);
            target.on(Mousewheel.event, swiper.mousewheel.handle);
            swiper.mousewheel.enabled = true;
            return true;
          },
          disable: function disable() {
            var swiper = this;
            if (!Mousewheel.event) return false;
            if (!swiper.mousewheel.enabled) return false;
            var target = swiper.$el;
            if (swiper.params.mousewheel.eventsTarged !== 'container') {
              target = $(swiper.params.mousewheel.eventsTarged);
            }
            target.off(Mousewheel.event, swiper.mousewheel.handle);
            swiper.mousewheel.enabled = false;
            return true;
          }
        };
        var Mousewheel$1 = {
          name: 'mousewheel',
          params: {
            mousewheel: {
              enabled: false,
              releaseOnEdges: false,
              invert: false,
              forceToAxis: false,
              sensitivity: 1,
              eventsTarged: 'container'
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              mousewheel: {
                enabled: false,
                enable: Mousewheel.enable.bind(swiper),
                disable: Mousewheel.disable.bind(swiper),
                handle: Mousewheel.handle.bind(swiper),
                handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper),
                handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper),
                lastScrollTime: Utils.now()
              }
            });
          },
          on: {
            init: function init() {
              var swiper = this;
              if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable();
            },
            destroy: function destroy() {
              var swiper = this;
              if (swiper.mousewheel.enabled) swiper.mousewheel.disable();
            }
          }
        };
        var Navigation = {
          update: function update() {
            // Update Navigation Buttons
            var swiper = this;
            var params = swiper.params.navigation;
            if (swiper.params.loop) return;
            var _swiper$navigation = swiper.navigation,
              $nextEl = _swiper$navigation.$nextEl,
              $prevEl = _swiper$navigation.$prevEl;
            if ($prevEl && $prevEl.length > 0) {
              if (swiper.isBeginning) {
                $prevEl.addClass(params.disabledClass);
              } else {
                $prevEl.removeClass(params.disabledClass);
              }
              $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
            }
            if ($nextEl && $nextEl.length > 0) {
              if (swiper.isEnd) {
                $nextEl.addClass(params.disabledClass);
              } else {
                $nextEl.removeClass(params.disabledClass);
              }
              $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
            }
          },
          onPrevClick: function onPrevClick(e) {
            var swiper = this;
            e.preventDefault();
            if (swiper.isBeginning && !swiper.params.loop) return;
            swiper.slidePrev();
          },
          onNextClick: function onNextClick(e) {
            var swiper = this;
            e.preventDefault();
            if (swiper.isEnd && !swiper.params.loop) return;
            swiper.slideNext();
          },
          init: function init() {
            var swiper = this;
            var params = swiper.params.navigation;
            if (!(params.nextEl || params.prevEl)) return;
            var $nextEl;
            var $prevEl;
            if (params.nextEl) {
              $nextEl = $(params.nextEl);
              if (swiper.params.uniqueNavElements && typeof params.nextEl === 'string' && $nextEl.length > 1 && swiper.$el.find(params.nextEl).length === 1) {
                $nextEl = swiper.$el.find(params.nextEl);
              }
            }
            if (params.prevEl) {
              $prevEl = $(params.prevEl);
              if (swiper.params.uniqueNavElements && typeof params.prevEl === 'string' && $prevEl.length > 1 && swiper.$el.find(params.prevEl).length === 1) {
                $prevEl = swiper.$el.find(params.prevEl);
              }
            }
            if ($nextEl && $nextEl.length > 0) {
              $nextEl.on('click', swiper.navigation.onNextClick);
            }
            if ($prevEl && $prevEl.length > 0) {
              $prevEl.on('click', swiper.navigation.onPrevClick);
            }
            Utils.extend(swiper.navigation, {
              $nextEl: $nextEl,
              nextEl: $nextEl && $nextEl[0],
              $prevEl: $prevEl,
              prevEl: $prevEl && $prevEl[0]
            });
          },
          destroy: function destroy() {
            var swiper = this;
            var _swiper$navigation2 = swiper.navigation,
              $nextEl = _swiper$navigation2.$nextEl,
              $prevEl = _swiper$navigation2.$prevEl;
            if ($nextEl && $nextEl.length) {
              $nextEl.off('click', swiper.navigation.onNextClick);
              $nextEl.removeClass(swiper.params.navigation.disabledClass);
            }
            if ($prevEl && $prevEl.length) {
              $prevEl.off('click', swiper.navigation.onPrevClick);
              $prevEl.removeClass(swiper.params.navigation.disabledClass);
            }
          }
        };
        var Navigation$1 = {
          name: 'navigation',
          params: {
            navigation: {
              nextEl: null,
              prevEl: null,
              hideOnClick: false,
              disabledClass: 'swiper-button-disabled',
              hiddenClass: 'swiper-button-hidden',
              lockClass: 'swiper-button-lock'
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              navigation: {
                init: Navigation.init.bind(swiper),
                update: Navigation.update.bind(swiper),
                destroy: Navigation.destroy.bind(swiper),
                onNextClick: Navigation.onNextClick.bind(swiper),
                onPrevClick: Navigation.onPrevClick.bind(swiper)
              }
            });
          },
          on: {
            init: function init() {
              var swiper = this;
              swiper.navigation.init();
              swiper.navigation.update();
            },
            toEdge: function toEdge() {
              var swiper = this;
              swiper.navigation.update();
            },
            fromEdge: function fromEdge() {
              var swiper = this;
              swiper.navigation.update();
            },
            destroy: function destroy() {
              var swiper = this;
              swiper.navigation.destroy();
            },
            click: function click(e) {
              var swiper = this;
              var _swiper$navigation3 = swiper.navigation,
                $nextEl = _swiper$navigation3.$nextEl,
                $prevEl = _swiper$navigation3.$prevEl;
              if (swiper.params.navigation.hideOnClick && !$(e.target).is($prevEl) && !$(e.target).is($nextEl)) {
                var isHidden;
                if ($nextEl) {
                  isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass);
                } else if ($prevEl) {
                  isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass);
                }
                if (isHidden === true) {
                  swiper.emit('navigationShow', swiper);
                } else {
                  swiper.emit('navigationHide', swiper);
                }
                if ($nextEl) {
                  $nextEl.toggleClass(swiper.params.navigation.hiddenClass);
                }
                if ($prevEl) {
                  $prevEl.toggleClass(swiper.params.navigation.hiddenClass);
                }
              }
            }
          }
        };
        var Pagination = {
          update: function update() {
            // Render || Update Pagination bullets/items
            var swiper = this;
            var rtl = swiper.rtl;
            var params = swiper.params.pagination;
            if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
            var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
            var $el = swiper.pagination.$el;
            // Current/Total
            var current;
            var total = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
            if (swiper.params.loop) {
              current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup);
              if (current > slidesLength - 1 - swiper.loopedSlides * 2) {
                current -= slidesLength - swiper.loopedSlides * 2;
              }
              if (current > total - 1) current -= total;
              if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current;
            } else if (typeof swiper.snapIndex !== 'undefined') {
              current = swiper.snapIndex;
            } else {
              current = swiper.activeIndex || 0;
            }
            // Types
            if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) {
              var bullets = swiper.pagination.bullets;
              var firstIndex;
              var lastIndex;
              var midIndex;
              if (params.dynamicBullets) {
                swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true);
                $el.css(swiper.isHorizontal() ? 'width' : 'height', "".concat(swiper.pagination.bulletSize * (params.dynamicMainBullets + 4), "px"));
                if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) {
                  swiper.pagination.dynamicBulletIndex += current - swiper.previousIndex;
                  if (swiper.pagination.dynamicBulletIndex > params.dynamicMainBullets - 1) {
                    swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1;
                  } else if (swiper.pagination.dynamicBulletIndex < 0) {
                    swiper.pagination.dynamicBulletIndex = 0;
                  }
                }
                firstIndex = current - swiper.pagination.dynamicBulletIndex;
                lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1);
                midIndex = (lastIndex + firstIndex) / 2;
              }
              bullets.removeClass("".concat(params.bulletActiveClass, " ").concat(params.bulletActiveClass, "-next ").concat(params.bulletActiveClass, "-next-next ").concat(params.bulletActiveClass, "-prev ").concat(params.bulletActiveClass, "-prev-prev ").concat(params.bulletActiveClass, "-main"));
              if ($el.length > 1) {
                bullets.each(function (index, bullet) {
                  var $bullet = $(bullet);
                  var bulletIndex = $bullet.index();
                  if (bulletIndex === current) {
                    $bullet.addClass(params.bulletActiveClass);
                  }
                  if (params.dynamicBullets) {
                    if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) {
                      $bullet.addClass("".concat(params.bulletActiveClass, "-main"));
                    }
                    if (bulletIndex === firstIndex) {
                      $bullet.prev().addClass("".concat(params.bulletActiveClass, "-prev")).prev().addClass("".concat(params.bulletActiveClass, "-prev-prev"));
                    }
                    if (bulletIndex === lastIndex) {
                      $bullet.next().addClass("".concat(params.bulletActiveClass, "-next")).next().addClass("".concat(params.bulletActiveClass, "-next-next"));
                    }
                  }
                });
              } else {
                var $bullet = bullets.eq(current);
                $bullet.addClass(params.bulletActiveClass);
                if (params.dynamicBullets) {
                  var $firstDisplayedBullet = bullets.eq(firstIndex);
                  var $lastDisplayedBullet = bullets.eq(lastIndex);
                  for (var i = firstIndex; i <= lastIndex; i += 1) {
                    bullets.eq(i).addClass("".concat(params.bulletActiveClass, "-main"));
                  }
                  $firstDisplayedBullet.prev().addClass("".concat(params.bulletActiveClass, "-prev")).prev().addClass("".concat(params.bulletActiveClass, "-prev-prev"));
                  $lastDisplayedBullet.next().addClass("".concat(params.bulletActiveClass, "-next")).next().addClass("".concat(params.bulletActiveClass, "-next-next"));
                }
              }
              if (params.dynamicBullets) {
                var dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4);
                var bulletsOffset = (swiper.pagination.bulletSize * dynamicBulletsLength - swiper.pagination.bulletSize) / 2 - midIndex * swiper.pagination.bulletSize;
                var offsetProp = rtl ? 'right' : 'left';
                bullets.css(swiper.isHorizontal() ? offsetProp : 'top', "".concat(bulletsOffset, "px"));
              }
            }
            if (params.type === 'fraction') {
              $el.find(".".concat(params.currentClass)).text(params.formatFractionCurrent(current + 1));
              $el.find(".".concat(params.totalClass)).text(params.formatFractionTotal(total));
            }
            if (params.type === 'progressbar') {
              var progressbarDirection;
              if (params.progressbarOpposite) {
                progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal';
              } else {
                progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical';
              }
              var scale = (current + 1) / total;
              var scaleX = 1;
              var scaleY = 1;
              if (progressbarDirection === 'horizontal') {
                scaleX = scale;
              } else {
                scaleY = scale;
              }
              $el.find(".".concat(params.progressbarFillClass)).transform("translate3d(0,0,0) scaleX(".concat(scaleX, ") scaleY(").concat(scaleY, ")")).transition(swiper.params.speed);
            }
            if (params.type === 'custom' && params.renderCustom) {
              $el.html(params.renderCustom(swiper, current + 1, total));
              swiper.emit('paginationRender', swiper, $el[0]);
            } else {
              swiper.emit('paginationUpdate', swiper, $el[0]);
            }
            $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass);
          },
          render: function render() {
            // Render Container
            var swiper = this;
            var params = swiper.params.pagination;
            if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
            var slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length;
            var $el = swiper.pagination.$el;
            var paginationHTML = '';
            if (params.type === 'bullets') {
              var numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - swiper.loopedSlides * 2) / swiper.params.slidesPerGroup) : swiper.snapGrid.length;
              for (var i = 0; i < numberOfBullets; i += 1) {
                if (params.renderBullet) {
                  paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass);
                } else {
                  paginationHTML += "<".concat(params.bulletElement, " class=\"").concat(params.bulletClass, "\"></").concat(params.bulletElement, ">");
                }
              }
              $el.html(paginationHTML);
              swiper.pagination.bullets = $el.find(".".concat(params.bulletClass));
            }
            if (params.type === 'fraction') {
              if (params.renderFraction) {
                paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass);
              } else {
                paginationHTML = "<span class=\"".concat(params.currentClass, "\"></span>") + ' / ' + "<span class=\"".concat(params.totalClass, "\"></span>");
              }
              $el.html(paginationHTML);
            }
            if (params.type === 'progressbar') {
              if (params.renderProgressbar) {
                paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass);
              } else {
                paginationHTML = "<span class=\"".concat(params.progressbarFillClass, "\"></span>");
              }
              $el.html(paginationHTML);
            }
            if (params.type !== 'custom') {
              swiper.emit('paginationRender', swiper.pagination.$el[0]);
            }
          },
          init: function init() {
            var swiper = this;
            var params = swiper.params.pagination;
            if (!params.el) return;
            var $el = $(params.el);
            if ($el.length === 0) return;
            if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && swiper.$el.find(params.el).length === 1) {
              $el = swiper.$el.find(params.el);
            }
            if (params.type === 'bullets' && params.clickable) {
              $el.addClass(params.clickableClass);
            }
            $el.addClass(params.modifierClass + params.type);
            if (params.type === 'bullets' && params.dynamicBullets) {
              $el.addClass("".concat(params.modifierClass).concat(params.type, "-dynamic"));
              swiper.pagination.dynamicBulletIndex = 0;
              if (params.dynamicMainBullets < 1) {
                params.dynamicMainBullets = 1;
              }
            }
            if (params.type === 'progressbar' && params.progressbarOpposite) {
              $el.addClass(params.progressbarOppositeClass);
            }
            if (params.clickable) {
              $el.on('click', ".".concat(params.bulletClass), function onClick(e) {
                e.preventDefault();
                var index = $(this).index() * swiper.params.slidesPerGroup;
                if (swiper.params.loop) index += swiper.loopedSlides;
                swiper.slideTo(index);
              });
            }
            Utils.extend(swiper.pagination, {
              $el: $el,
              el: $el[0]
            });
          },
          destroy: function destroy() {
            var swiper = this;
            var params = swiper.params.pagination;
            if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return;
            var $el = swiper.pagination.$el;
            $el.removeClass(params.hiddenClass);
            $el.removeClass(params.modifierClass + params.type);
            if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass);
            if (params.clickable) {
              $el.off('click', ".".concat(params.bulletClass));
            }
          }
        };
        var Pagination$1 = {
          name: 'pagination',
          params: {
            pagination: {
              el: null,
              bulletElement: 'span',
              clickable: false,
              hideOnClick: false,
              renderBullet: null,
              renderProgressbar: null,
              renderFraction: null,
              renderCustom: null,
              progressbarOpposite: false,
              type: 'bullets',
              // 'bullets' or 'progressbar' or 'fraction' or 'custom'
              dynamicBullets: false,
              dynamicMainBullets: 1,
              formatFractionCurrent: function formatFractionCurrent(number) {
                return number;
              },
              formatFractionTotal: function formatFractionTotal(number) {
                return number;
              },
              bulletClass: 'swiper-pagination-bullet',
              bulletActiveClass: 'swiper-pagination-bullet-active',
              modifierClass: 'swiper-pagination-',
              // NEW
              currentClass: 'swiper-pagination-current',
              totalClass: 'swiper-pagination-total',
              hiddenClass: 'swiper-pagination-hidden',
              progressbarFillClass: 'swiper-pagination-progressbar-fill',
              progressbarOppositeClass: 'swiper-pagination-progressbar-opposite',
              clickableClass: 'swiper-pagination-clickable',
              // NEW
              lockClass: 'swiper-pagination-lock'
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              pagination: {
                init: Pagination.init.bind(swiper),
                render: Pagination.render.bind(swiper),
                update: Pagination.update.bind(swiper),
                destroy: Pagination.destroy.bind(swiper),
                dynamicBulletIndex: 0
              }
            });
          },
          on: {
            init: function init() {
              var swiper = this;
              swiper.pagination.init();
              swiper.pagination.render();
              swiper.pagination.update();
            },
            activeIndexChange: function activeIndexChange() {
              var swiper = this;
              if (swiper.params.loop) {
                swiper.pagination.update();
              } else if (typeof swiper.snapIndex === 'undefined') {
                swiper.pagination.update();
              }
            },
            snapIndexChange: function snapIndexChange() {
              var swiper = this;
              if (!swiper.params.loop) {
                swiper.pagination.update();
              }
            },
            slidesLengthChange: function slidesLengthChange() {
              var swiper = this;
              if (swiper.params.loop) {
                swiper.pagination.render();
                swiper.pagination.update();
              }
            },
            snapGridLengthChange: function snapGridLengthChange() {
              var swiper = this;
              if (!swiper.params.loop) {
                swiper.pagination.render();
                swiper.pagination.update();
              }
            },
            destroy: function destroy() {
              var swiper = this;
              swiper.pagination.destroy();
            },
            click: function click(e) {
              var swiper = this;
              if (swiper.params.pagination.el && swiper.params.pagination.hideOnClick && swiper.pagination.$el.length > 0 && !$(e.target).hasClass(swiper.params.pagination.bulletClass)) {
                var isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass);
                if (isHidden === true) {
                  swiper.emit('paginationShow', swiper);
                } else {
                  swiper.emit('paginationHide', swiper);
                }
                swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass);
              }
            }
          }
        };
        var Scrollbar = {
          setTranslate: function setTranslate() {
            var swiper = this;
            if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
            var scrollbar = swiper.scrollbar,
              rtl = swiper.rtlTranslate,
              progress = swiper.progress;
            var dragSize = scrollbar.dragSize,
              trackSize = scrollbar.trackSize,
              $dragEl = scrollbar.$dragEl,
              $el = scrollbar.$el;
            var params = swiper.params.scrollbar;
            var newSize = dragSize;
            var newPos = (trackSize - dragSize) * progress;
            if (rtl) {
              newPos = -newPos;
              if (newPos > 0) {
                newSize = dragSize - newPos;
                newPos = 0;
              } else if (-newPos + dragSize > trackSize) {
                newSize = trackSize + newPos;
              }
            } else if (newPos < 0) {
              newSize = dragSize + newPos;
              newPos = 0;
            } else if (newPos + dragSize > trackSize) {
              newSize = trackSize - newPos;
            }
            if (swiper.isHorizontal()) {
              if (Support.transforms3d) {
                $dragEl.transform("translate3d(".concat(newPos, "px, 0, 0)"));
              } else {
                $dragEl.transform("translateX(".concat(newPos, "px)"));
              }
              $dragEl[0].style.width = "".concat(newSize, "px");
            } else {
              if (Support.transforms3d) {
                $dragEl.transform("translate3d(0px, ".concat(newPos, "px, 0)"));
              } else {
                $dragEl.transform("translateY(".concat(newPos, "px)"));
              }
              $dragEl[0].style.height = "".concat(newSize, "px");
            }
            if (params.hide) {
              clearTimeout(swiper.scrollbar.timeout);
              $el[0].style.opacity = 1;
              swiper.scrollbar.timeout = setTimeout(function () {
                $el[0].style.opacity = 0;
                $el.transition(400);
              }, 1000);
            }
          },
          setTransition: function setTransition(duration) {
            var swiper = this;
            if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
            swiper.scrollbar.$dragEl.transition(duration);
          },
          updateSize: function updateSize() {
            var swiper = this;
            if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return;
            var scrollbar = swiper.scrollbar;
            var $dragEl = scrollbar.$dragEl,
              $el = scrollbar.$el;
            $dragEl[0].style.width = '';
            $dragEl[0].style.height = '';
            var trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight;
            var divider = swiper.size / swiper.virtualSize;
            var moveDivider = divider * (trackSize / swiper.size);
            var dragSize;
            if (swiper.params.scrollbar.dragSize === 'auto') {
              dragSize = trackSize * divider;
            } else {
              dragSize = parseInt(swiper.params.scrollbar.dragSize, 10);
            }
            if (swiper.isHorizontal()) {
              $dragEl[0].style.width = "".concat(dragSize, "px");
            } else {
              $dragEl[0].style.height = "".concat(dragSize, "px");
            }
            if (divider >= 1) {
              $el[0].style.display = 'none';
            } else {
              $el[0].style.display = '';
            }
            if (swiper.params.scrollbar.hide) {
              $el[0].style.opacity = 0;
            }
            Utils.extend(scrollbar, {
              trackSize: trackSize,
              divider: divider,
              moveDivider: moveDivider,
              dragSize: dragSize
            });
            scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass);
          },
          getPointerPosition: function getPointerPosition(e) {
            var swiper = this;
            if (swiper.isHorizontal()) {
              return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX || e.clientX;
            }
            return e.type === 'touchstart' || e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY || e.clientY;
          },
          setDragPosition: function setDragPosition(e) {
            var swiper = this;
            var scrollbar = swiper.scrollbar,
              rtl = swiper.rtlTranslate;
            var $el = scrollbar.$el,
              dragSize = scrollbar.dragSize,
              trackSize = scrollbar.trackSize,
              dragStartPos = scrollbar.dragStartPos;
            var positionRatio;
            positionRatio = (scrollbar.getPointerPosition(e) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize);
            positionRatio = Math.max(Math.min(positionRatio, 1), 0);
            if (rtl) {
              positionRatio = 1 - positionRatio;
            }
            var position = swiper.minTranslate() + (swiper.maxTranslate() - swiper.minTranslate()) * positionRatio;
            swiper.updateProgress(position);
            swiper.setTranslate(position);
            swiper.updateActiveIndex();
            swiper.updateSlidesClasses();
          },
          onDragStart: function onDragStart(e) {
            var swiper = this;
            var params = swiper.params.scrollbar;
            var scrollbar = swiper.scrollbar,
              $wrapperEl = swiper.$wrapperEl;
            var $el = scrollbar.$el,
              $dragEl = scrollbar.$dragEl;
            swiper.scrollbar.isTouched = true;
            swiper.scrollbar.dragStartPos = e.target === $dragEl[0] || e.target === $dragEl ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null;
            e.preventDefault();
            e.stopPropagation();
            $wrapperEl.transition(100);
            $dragEl.transition(100);
            scrollbar.setDragPosition(e);
            clearTimeout(swiper.scrollbar.dragTimeout);
            $el.transition(0);
            if (params.hide) {
              $el.css('opacity', 1);
            }
            swiper.emit('scrollbarDragStart', e);
          },
          onDragMove: function onDragMove(e) {
            var swiper = this;
            var scrollbar = swiper.scrollbar,
              $wrapperEl = swiper.$wrapperEl;
            var $el = scrollbar.$el,
              $dragEl = scrollbar.$dragEl;
            if (!swiper.scrollbar.isTouched) return;
            if (e.preventDefault) e.preventDefault();else e.returnValue = false;
            scrollbar.setDragPosition(e);
            $wrapperEl.transition(0);
            $el.transition(0);
            $dragEl.transition(0);
            swiper.emit('scrollbarDragMove', e);
          },
          onDragEnd: function onDragEnd(e) {
            var swiper = this;
            var params = swiper.params.scrollbar;
            var scrollbar = swiper.scrollbar;
            var $el = scrollbar.$el;
            if (!swiper.scrollbar.isTouched) return;
            swiper.scrollbar.isTouched = false;
            if (params.hide) {
              clearTimeout(swiper.scrollbar.dragTimeout);
              swiper.scrollbar.dragTimeout = Utils.nextTick(function () {
                $el.css('opacity', 0);
                $el.transition(400);
              }, 1000);
            }
            swiper.emit('scrollbarDragEnd', e);
            if (params.snapOnRelease) {
              swiper.slideToClosest();
            }
          },
          enableDraggable: function enableDraggable() {
            var swiper = this;
            if (!swiper.params.scrollbar.el) return;
            var scrollbar = swiper.scrollbar,
              touchEventsTouch = swiper.touchEventsTouch,
              touchEventsDesktop = swiper.touchEventsDesktop,
              params = swiper.params;
            var $el = scrollbar.$el;
            var target = $el[0];
            var activeListener = Support.passiveListener && params.passiveListeners ? {
              passive: false,
              capture: false
            } : false;
            var passiveListener = Support.passiveListener && params.passiveListeners ? {
              passive: true,
              capture: false
            } : false;
            if (!Support.touch) {
              target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
              doc.addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
              doc.addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
            } else {
              target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
              target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
              target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
            }
          },
          disableDraggable: function disableDraggable() {
            var swiper = this;
            if (!swiper.params.scrollbar.el) return;
            var scrollbar = swiper.scrollbar,
              touchEventsTouch = swiper.touchEventsTouch,
              touchEventsDesktop = swiper.touchEventsDesktop,
              params = swiper.params;
            var $el = scrollbar.$el;
            var target = $el[0];
            var activeListener = Support.passiveListener && params.passiveListeners ? {
              passive: false,
              capture: false
            } : false;
            var passiveListener = Support.passiveListener && params.passiveListeners ? {
              passive: true,
              capture: false
            } : false;
            if (!Support.touch) {
              target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener);
              doc.removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener);
              doc.removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener);
            } else {
              target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener);
              target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener);
              target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener);
            }
          },
          init: function init() {
            var swiper = this;
            if (!swiper.params.scrollbar.el) return;
            var scrollbar = swiper.scrollbar,
              $swiperEl = swiper.$el;
            var params = swiper.params.scrollbar;
            var $el = $(params.el);
            if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) {
              $el = $swiperEl.find(params.el);
            }
            var $dragEl = $el.find(".".concat(swiper.params.scrollbar.dragClass));
            if ($dragEl.length === 0) {
              $dragEl = $("<div class=\"".concat(swiper.params.scrollbar.dragClass, "\"></div>"));
              $el.append($dragEl);
            }
            Utils.extend(scrollbar, {
              $el: $el,
              el: $el[0],
              $dragEl: $dragEl,
              dragEl: $dragEl[0]
            });
            if (params.draggable) {
              scrollbar.enableDraggable();
            }
          },
          destroy: function destroy() {
            var swiper = this;
            swiper.scrollbar.disableDraggable();
          }
        };
        var Scrollbar$1 = {
          name: 'scrollbar',
          params: {
            scrollbar: {
              el: null,
              dragSize: 'auto',
              hide: false,
              draggable: false,
              snapOnRelease: true,
              lockClass: 'swiper-scrollbar-lock',
              dragClass: 'swiper-scrollbar-drag'
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              scrollbar: {
                init: Scrollbar.init.bind(swiper),
                destroy: Scrollbar.destroy.bind(swiper),
                updateSize: Scrollbar.updateSize.bind(swiper),
                setTranslate: Scrollbar.setTranslate.bind(swiper),
                setTransition: Scrollbar.setTransition.bind(swiper),
                enableDraggable: Scrollbar.enableDraggable.bind(swiper),
                disableDraggable: Scrollbar.disableDraggable.bind(swiper),
                setDragPosition: Scrollbar.setDragPosition.bind(swiper),
                getPointerPosition: Scrollbar.getPointerPosition.bind(swiper),
                onDragStart: Scrollbar.onDragStart.bind(swiper),
                onDragMove: Scrollbar.onDragMove.bind(swiper),
                onDragEnd: Scrollbar.onDragEnd.bind(swiper),
                isTouched: false,
                timeout: null,
                dragTimeout: null
              }
            });
          },
          on: {
            init: function init() {
              var swiper = this;
              swiper.scrollbar.init();
              swiper.scrollbar.updateSize();
              swiper.scrollbar.setTranslate();
            },
            update: function update() {
              var swiper = this;
              swiper.scrollbar.updateSize();
            },
            resize: function resize() {
              var swiper = this;
              swiper.scrollbar.updateSize();
            },
            observerUpdate: function observerUpdate() {
              var swiper = this;
              swiper.scrollbar.updateSize();
            },
            setTranslate: function setTranslate() {
              var swiper = this;
              swiper.scrollbar.setTranslate();
            },
            setTransition: function setTransition(duration) {
              var swiper = this;
              swiper.scrollbar.setTransition(duration);
            },
            destroy: function destroy() {
              var swiper = this;
              swiper.scrollbar.destroy();
            }
          }
        };
        var Parallax = {
          setTransform: function setTransform(el, progress) {
            var swiper = this;
            var rtl = swiper.rtl;
            var $el = $(el);
            var rtlFactor = rtl ? -1 : 1;
            var p = $el.attr('data-swiper-parallax') || '0';
            var x = $el.attr('data-swiper-parallax-x');
            var y = $el.attr('data-swiper-parallax-y');
            var scale = $el.attr('data-swiper-parallax-scale');
            var opacity = $el.attr('data-swiper-parallax-opacity');
            if (x || y) {
              x = x || '0';
              y = y || '0';
            } else if (swiper.isHorizontal()) {
              x = p;
              y = '0';
            } else {
              y = p;
              x = '0';
            }
            if (x.indexOf('%') >= 0) {
              x = "".concat(parseInt(x, 10) * progress * rtlFactor, "%");
            } else {
              x = "".concat(x * progress * rtlFactor, "px");
            }
            if (y.indexOf('%') >= 0) {
              y = "".concat(parseInt(y, 10) * progress, "%");
            } else {
              y = "".concat(y * progress, "px");
            }
            if (typeof opacity !== 'undefined' && opacity !== null) {
              var currentOpacity = opacity - (opacity - 1) * (1 - Math.abs(progress));
              $el[0].style.opacity = currentOpacity;
            }
            if (typeof scale === 'undefined' || scale === null) {
              $el.transform("translate3d(".concat(x, ", ").concat(y, ", 0px)"));
            } else {
              var currentScale = scale - (scale - 1) * (1 - Math.abs(progress));
              $el.transform("translate3d(".concat(x, ", ").concat(y, ", 0px) scale(").concat(currentScale, ")"));
            }
          },
          setTranslate: function setTranslate() {
            var swiper = this;
            var $el = swiper.$el,
              slides = swiper.slides,
              progress = swiper.progress,
              snapGrid = swiper.snapGrid;
            $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (index, el) {
              swiper.parallax.setTransform(el, progress);
            });
            slides.each(function (slideIndex, slideEl) {
              var slideProgress = slideEl.progress;
              if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') {
                slideProgress += Math.ceil(slideIndex / 2) - progress * (snapGrid.length - 1);
              }
              slideProgress = Math.min(Math.max(slideProgress, -1), 1);
              $(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (index, el) {
                swiper.parallax.setTransform(el, slideProgress);
              });
            });
          },
          setTransition: function setTransition() {
            var duration = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.params.speed;
            var swiper = this;
            var $el = swiper.$el;
            $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]').each(function (index, parallaxEl) {
              var $parallaxEl = $(parallaxEl);
              var parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration;
              if (duration === 0) parallaxDuration = 0;
              $parallaxEl.transition(parallaxDuration);
            });
          }
        };
        var Parallax$1 = {
          name: 'parallax',
          params: {
            parallax: {
              enabled: false
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              parallax: {
                setTransform: Parallax.setTransform.bind(swiper),
                setTranslate: Parallax.setTranslate.bind(swiper),
                setTransition: Parallax.setTransition.bind(swiper)
              }
            });
          },
          on: {
            beforeInit: function beforeInit() {
              var swiper = this;
              if (!swiper.params.parallax.enabled) return;
              swiper.params.watchSlidesProgress = true;
              swiper.originalParams.watchSlidesProgress = true;
            },
            init: function init() {
              var swiper = this;
              if (!swiper.params.parallax.enabled) return;
              swiper.parallax.setTranslate();
            },
            setTranslate: function setTranslate() {
              var swiper = this;
              if (!swiper.params.parallax.enabled) return;
              swiper.parallax.setTranslate();
            },
            setTransition: function setTransition(duration) {
              var swiper = this;
              if (!swiper.params.parallax.enabled) return;
              swiper.parallax.setTransition(duration);
            }
          }
        };
        var Zoom = {
          // Calc Scale From Multi-touches
          getDistanceBetweenTouches: function getDistanceBetweenTouches(e) {
            if (e.targetTouches.length < 2) return 1;
            var x1 = e.targetTouches[0].pageX;
            var y1 = e.targetTouches[0].pageY;
            var x2 = e.targetTouches[1].pageX;
            var y2 = e.targetTouches[1].pageY;
            var distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
            return distance;
          },
          // Events
          onGestureStart: function onGestureStart(e) {
            var swiper = this;
            var params = swiper.params.zoom;
            var zoom = swiper.zoom;
            var gesture = zoom.gesture;
            zoom.fakeGestureTouched = false;
            zoom.fakeGestureMoved = false;
            if (!Support.gestures) {
              if (e.type !== 'touchstart' || e.type === 'touchstart' && e.targetTouches.length < 2) {
                return;
              }
              zoom.fakeGestureTouched = true;
              gesture.scaleStart = Zoom.getDistanceBetweenTouches(e);
            }
            if (!gesture.$slideEl || !gesture.$slideEl.length) {
              gesture.$slideEl = $(e.target).closest('.swiper-slide');
              if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex);
              gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');
              gesture.$imageWrapEl = gesture.$imageEl.parent(".".concat(params.containerClass));
              gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
              if (gesture.$imageWrapEl.length === 0) {
                gesture.$imageEl = undefined;
                return;
              }
            }
            gesture.$imageEl.transition(0);
            swiper.zoom.isScaling = true;
          },
          onGestureChange: function onGestureChange(e) {
            var swiper = this;
            var params = swiper.params.zoom;
            var zoom = swiper.zoom;
            var gesture = zoom.gesture;
            if (!Support.gestures) {
              if (e.type !== 'touchmove' || e.type === 'touchmove' && e.targetTouches.length < 2) {
                return;
              }
              zoom.fakeGestureMoved = true;
              gesture.scaleMove = Zoom.getDistanceBetweenTouches(e);
            }
            if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
            if (Support.gestures) {
              zoom.scale = e.scale * zoom.currentScale;
            } else {
              zoom.scale = gesture.scaleMove / gesture.scaleStart * zoom.currentScale;
            }
            if (zoom.scale > gesture.maxRatio) {
              zoom.scale = gesture.maxRatio - 1 + Math.pow(zoom.scale - gesture.maxRatio + 1, 0.5);
            }
            if (zoom.scale < params.minRatio) {
              zoom.scale = params.minRatio + 1 - Math.pow(params.minRatio - zoom.scale + 1, 0.5);
            }
            gesture.$imageEl.transform("translate3d(0,0,0) scale(".concat(zoom.scale, ")"));
          },
          onGestureEnd: function onGestureEnd(e) {
            var swiper = this;
            var params = swiper.params.zoom;
            var zoom = swiper.zoom;
            var gesture = zoom.gesture;
            if (!Support.gestures) {
              if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) {
                return;
              }
              if (e.type !== 'touchend' || e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android) {
                return;
              }
              zoom.fakeGestureTouched = false;
              zoom.fakeGestureMoved = false;
            }
            if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
            zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio);
            gesture.$imageEl.transition(swiper.params.speed).transform("translate3d(0,0,0) scale(".concat(zoom.scale, ")"));
            zoom.currentScale = zoom.scale;
            zoom.isScaling = false;
            if (zoom.scale === 1) gesture.$slideEl = undefined;
          },
          onTouchStart: function onTouchStart(e) {
            var swiper = this;
            var zoom = swiper.zoom;
            var gesture = zoom.gesture,
              image = zoom.image;
            if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
            if (image.isTouched) return;
            if (Device.android) e.preventDefault();
            image.isTouched = true;
            image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
            image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
          },
          onTouchMove: function onTouchMove(e) {
            var swiper = this;
            var zoom = swiper.zoom;
            var gesture = zoom.gesture,
              image = zoom.image,
              velocity = zoom.velocity;
            if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
            swiper.allowClick = false;
            if (!image.isTouched || !gesture.$slideEl) return;
            if (!image.isMoved) {
              image.width = gesture.$imageEl[0].offsetWidth;
              image.height = gesture.$imageEl[0].offsetHeight;
              image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0;
              image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0;
              gesture.slideWidth = gesture.$slideEl[0].offsetWidth;
              gesture.slideHeight = gesture.$slideEl[0].offsetHeight;
              gesture.$imageWrapEl.transition(0);
              if (swiper.rtl) {
                image.startX = -image.startX;
                image.startY = -image.startY;
              }
            }
            // Define if we need image drag
            var scaledWidth = image.width * zoom.scale;
            var scaledHeight = image.height * zoom.scale;
            if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return;
            image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
            image.maxX = -image.minX;
            image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
            image.maxY = -image.minY;
            image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
            image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
            if (!image.isMoved && !zoom.isScaling) {
              if (swiper.isHorizontal() && (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x || Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x)) {
                image.isTouched = false;
                return;
              }
              if (!swiper.isHorizontal() && (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y || Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y)) {
                image.isTouched = false;
                return;
              }
            }
            e.preventDefault();
            e.stopPropagation();
            image.isMoved = true;
            image.currentX = image.touchesCurrent.x - image.touchesStart.x + image.startX;
            image.currentY = image.touchesCurrent.y - image.touchesStart.y + image.startY;
            if (image.currentX < image.minX) {
              image.currentX = image.minX + 1 - Math.pow(image.minX - image.currentX + 1, 0.8);
            }
            if (image.currentX > image.maxX) {
              image.currentX = image.maxX - 1 + Math.pow(image.currentX - image.maxX + 1, 0.8);
            }
            if (image.currentY < image.minY) {
              image.currentY = image.minY + 1 - Math.pow(image.minY - image.currentY + 1, 0.8);
            }
            if (image.currentY > image.maxY) {
              image.currentY = image.maxY - 1 + Math.pow(image.currentY - image.maxY + 1, 0.8);
            }

            // Velocity
            if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x;
            if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y;
            if (!velocity.prevTime) velocity.prevTime = Date.now();
            velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2;
            velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2;
            if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0;
            if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0;
            velocity.prevPositionX = image.touchesCurrent.x;
            velocity.prevPositionY = image.touchesCurrent.y;
            velocity.prevTime = Date.now();
            gesture.$imageWrapEl.transform("translate3d(".concat(image.currentX, "px, ").concat(image.currentY, "px,0)"));
          },
          onTouchEnd: function onTouchEnd() {
            var swiper = this;
            var zoom = swiper.zoom;
            var gesture = zoom.gesture,
              image = zoom.image,
              velocity = zoom.velocity;
            if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
            if (!image.isTouched || !image.isMoved) {
              image.isTouched = false;
              image.isMoved = false;
              return;
            }
            image.isTouched = false;
            image.isMoved = false;
            var momentumDurationX = 300;
            var momentumDurationY = 300;
            var momentumDistanceX = velocity.x * momentumDurationX;
            var newPositionX = image.currentX + momentumDistanceX;
            var momentumDistanceY = velocity.y * momentumDurationY;
            var newPositionY = image.currentY + momentumDistanceY;

            // Fix duration
            if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x);
            if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y);
            var momentumDuration = Math.max(momentumDurationX, momentumDurationY);
            image.currentX = newPositionX;
            image.currentY = newPositionY;

            // Define if we need image drag
            var scaledWidth = image.width * zoom.scale;
            var scaledHeight = image.height * zoom.scale;
            image.minX = Math.min(gesture.slideWidth / 2 - scaledWidth / 2, 0);
            image.maxX = -image.minX;
            image.minY = Math.min(gesture.slideHeight / 2 - scaledHeight / 2, 0);
            image.maxY = -image.minY;
            image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX);
            image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY);
            gesture.$imageWrapEl.transition(momentumDuration).transform("translate3d(".concat(image.currentX, "px, ").concat(image.currentY, "px,0)"));
          },
          onTransitionEnd: function onTransitionEnd() {
            var swiper = this;
            var zoom = swiper.zoom;
            var gesture = zoom.gesture;
            if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) {
              gesture.$imageEl.transform('translate3d(0,0,0) scale(1)');
              gesture.$imageWrapEl.transform('translate3d(0,0,0)');
              zoom.scale = 1;
              zoom.currentScale = 1;
              gesture.$slideEl = undefined;
              gesture.$imageEl = undefined;
              gesture.$imageWrapEl = undefined;
            }
          },
          // Toggle Zoom
          toggle: function toggle(e) {
            var swiper = this;
            var zoom = swiper.zoom;
            if (zoom.scale && zoom.scale !== 1) {
              // Zoom Out
              zoom.out();
            } else {
              // Zoom In
              zoom.in(e);
            }
          },
          in: function _in(e) {
            var swiper = this;
            var zoom = swiper.zoom;
            var params = swiper.params.zoom;
            var gesture = zoom.gesture,
              image = zoom.image;
            if (!gesture.$slideEl) {
              gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);
              gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');
              gesture.$imageWrapEl = gesture.$imageEl.parent(".".concat(params.containerClass));
            }
            if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
            gesture.$slideEl.addClass("".concat(params.zoomedSlideClass));
            var touchX;
            var touchY;
            var offsetX;
            var offsetY;
            var diffX;
            var diffY;
            var translateX;
            var translateY;
            var imageWidth;
            var imageHeight;
            var scaledWidth;
            var scaledHeight;
            var translateMinX;
            var translateMinY;
            var translateMaxX;
            var translateMaxY;
            var slideWidth;
            var slideHeight;
            if (typeof image.touchesStart.x === 'undefined' && e) {
              touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX;
              touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY;
            } else {
              touchX = image.touchesStart.x;
              touchY = image.touchesStart.y;
            }
            zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
            zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio;
            if (e) {
              slideWidth = gesture.$slideEl[0].offsetWidth;
              slideHeight = gesture.$slideEl[0].offsetHeight;
              offsetX = gesture.$slideEl.offset().left;
              offsetY = gesture.$slideEl.offset().top;
              diffX = offsetX + slideWidth / 2 - touchX;
              diffY = offsetY + slideHeight / 2 - touchY;
              imageWidth = gesture.$imageEl[0].offsetWidth;
              imageHeight = gesture.$imageEl[0].offsetHeight;
              scaledWidth = imageWidth * zoom.scale;
              scaledHeight = imageHeight * zoom.scale;
              translateMinX = Math.min(slideWidth / 2 - scaledWidth / 2, 0);
              translateMinY = Math.min(slideHeight / 2 - scaledHeight / 2, 0);
              translateMaxX = -translateMinX;
              translateMaxY = -translateMinY;
              translateX = diffX * zoom.scale;
              translateY = diffY * zoom.scale;
              if (translateX < translateMinX) {
                translateX = translateMinX;
              }
              if (translateX > translateMaxX) {
                translateX = translateMaxX;
              }
              if (translateY < translateMinY) {
                translateY = translateMinY;
              }
              if (translateY > translateMaxY) {
                translateY = translateMaxY;
              }
            } else {
              translateX = 0;
              translateY = 0;
            }
            gesture.$imageWrapEl.transition(300).transform("translate3d(".concat(translateX, "px, ").concat(translateY, "px,0)"));
            gesture.$imageEl.transition(300).transform("translate3d(0,0,0) scale(".concat(zoom.scale, ")"));
          },
          out: function out() {
            var swiper = this;
            var zoom = swiper.zoom;
            var params = swiper.params.zoom;
            var gesture = zoom.gesture;
            if (!gesture.$slideEl) {
              gesture.$slideEl = swiper.clickedSlide ? $(swiper.clickedSlide) : swiper.slides.eq(swiper.activeIndex);
              gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas');
              gesture.$imageWrapEl = gesture.$imageEl.parent(".".concat(params.containerClass));
            }
            if (!gesture.$imageEl || gesture.$imageEl.length === 0) return;
            zoom.scale = 1;
            zoom.currentScale = 1;
            gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)');
            gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)');
            gesture.$slideEl.removeClass("".concat(params.zoomedSlideClass));
            gesture.$slideEl = undefined;
          },
          // Attach/Detach Events
          enable: function enable() {
            var swiper = this;
            var zoom = swiper.zoom;
            if (zoom.enabled) return;
            zoom.enabled = true;
            var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? {
              passive: true,
              capture: false
            } : false;

            // Scale image
            if (Support.gestures) {
              swiper.$wrapperEl.on('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);
              swiper.$wrapperEl.on('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);
              swiper.$wrapperEl.on('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);
            } else if (swiper.touchEvents.start === 'touchstart') {
              swiper.$wrapperEl.on(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);
              swiper.$wrapperEl.on(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);
              swiper.$wrapperEl.on(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);
            }

            // Move image
            swiper.$wrapperEl.on(swiper.touchEvents.move, ".".concat(swiper.params.zoom.containerClass), zoom.onTouchMove);
          },
          disable: function disable() {
            var swiper = this;
            var zoom = swiper.zoom;
            if (!zoom.enabled) return;
            swiper.zoom.enabled = false;
            var passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? {
              passive: true,
              capture: false
            } : false;

            // Scale image
            if (Support.gestures) {
              swiper.$wrapperEl.off('gesturestart', '.swiper-slide', zoom.onGestureStart, passiveListener);
              swiper.$wrapperEl.off('gesturechange', '.swiper-slide', zoom.onGestureChange, passiveListener);
              swiper.$wrapperEl.off('gestureend', '.swiper-slide', zoom.onGestureEnd, passiveListener);
            } else if (swiper.touchEvents.start === 'touchstart') {
              swiper.$wrapperEl.off(swiper.touchEvents.start, '.swiper-slide', zoom.onGestureStart, passiveListener);
              swiper.$wrapperEl.off(swiper.touchEvents.move, '.swiper-slide', zoom.onGestureChange, passiveListener);
              swiper.$wrapperEl.off(swiper.touchEvents.end, '.swiper-slide', zoom.onGestureEnd, passiveListener);
            }

            // Move image
            swiper.$wrapperEl.off(swiper.touchEvents.move, ".".concat(swiper.params.zoom.containerClass), zoom.onTouchMove);
          }
        };
        var Zoom$1 = {
          name: 'zoom',
          params: {
            zoom: {
              enabled: false,
              maxRatio: 3,
              minRatio: 1,
              toggle: true,
              containerClass: 'swiper-zoom-container',
              zoomedSlideClass: 'swiper-slide-zoomed'
            }
          },
          create: function create() {
            var swiper = this;
            var zoom = {
              enabled: false,
              scale: 1,
              currentScale: 1,
              isScaling: false,
              gesture: {
                $slideEl: undefined,
                slideWidth: undefined,
                slideHeight: undefined,
                $imageEl: undefined,
                $imageWrapEl: undefined,
                maxRatio: 3
              },
              image: {
                isTouched: undefined,
                isMoved: undefined,
                currentX: undefined,
                currentY: undefined,
                minX: undefined,
                minY: undefined,
                maxX: undefined,
                maxY: undefined,
                width: undefined,
                height: undefined,
                startX: undefined,
                startY: undefined,
                touchesStart: {},
                touchesCurrent: {}
              },
              velocity: {
                x: undefined,
                y: undefined,
                prevPositionX: undefined,
                prevPositionY: undefined,
                prevTime: undefined
              }
            };
            'onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out'.split(' ').forEach(function (methodName) {
              zoom[methodName] = Zoom[methodName].bind(swiper);
            });
            Utils.extend(swiper, {
              zoom: zoom
            });
            var scale = 1;
            Object.defineProperty(swiper.zoom, 'scale', {
              get: function get() {
                return scale;
              },
              set: function set(value) {
                if (scale !== value) {
                  var imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined;
                  var slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined;
                  swiper.emit('zoomChange', value, imageEl, slideEl);
                }
                scale = value;
              }
            });
          },
          on: {
            init: function init() {
              var swiper = this;
              if (swiper.params.zoom.enabled) {
                swiper.zoom.enable();
              }
            },
            destroy: function destroy() {
              var swiper = this;
              swiper.zoom.disable();
            },
            touchStart: function touchStart(e) {
              var swiper = this;
              if (!swiper.zoom.enabled) return;
              swiper.zoom.onTouchStart(e);
            },
            touchEnd: function touchEnd(e) {
              var swiper = this;
              if (!swiper.zoom.enabled) return;
              swiper.zoom.onTouchEnd(e);
            },
            doubleTap: function doubleTap(e) {
              var swiper = this;
              if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) {
                swiper.zoom.toggle(e);
              }
            },
            transitionEnd: function transitionEnd() {
              var swiper = this;
              if (swiper.zoom.enabled && swiper.params.zoom.enabled) {
                swiper.zoom.onTransitionEnd();
              }
            }
          }
        };
        var Lazy = {
          loadInSlide: function loadInSlide(index) {
            var loadInDuplicate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
            var swiper = this;
            var params = swiper.params.lazy;
            if (typeof index === 'undefined') return;
            if (swiper.slides.length === 0) return;
            var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
            var $slideEl = isVirtual ? swiper.$wrapperEl.children(".".concat(swiper.params.slideClass, "[data-swiper-slide-index=\"").concat(index, "\"]")) : swiper.slides.eq(index);
            var $images = $slideEl.find(".".concat(params.elementClass, ":not(.").concat(params.loadedClass, "):not(.").concat(params.loadingClass, ")"));
            if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) {
              $images = $images.add($slideEl[0]);
            }
            if ($images.length === 0) return;
            $images.each(function (imageIndex, imageEl) {
              var $imageEl = $(imageEl);
              $imageEl.addClass(params.loadingClass);
              var background = $imageEl.attr('data-background');
              var src = $imageEl.attr('data-src');
              var srcset = $imageEl.attr('data-srcset');
              var sizes = $imageEl.attr('data-sizes');
              swiper.loadImage($imageEl[0], src || background, srcset, sizes, false, function () {
                if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper && !swiper.params || swiper.destroyed) return;
                if (background) {
                  $imageEl.css('background-image', "url(\"".concat(background, "\")"));
                  $imageEl.removeAttr('data-background');
                } else {
                  if (srcset) {
                    $imageEl.attr('srcset', srcset);
                    $imageEl.removeAttr('data-srcset');
                  }
                  if (sizes) {
                    $imageEl.attr('sizes', sizes);
                    $imageEl.removeAttr('data-sizes');
                  }
                  if (src) {
                    $imageEl.attr('src', src);
                    $imageEl.removeAttr('data-src');
                  }
                }
                $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass);
                $slideEl.find(".".concat(params.preloaderClass)).remove();
                if (swiper.params.loop && loadInDuplicate) {
                  var slideOriginalIndex = $slideEl.attr('data-swiper-slide-index');
                  if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) {
                    var originalSlide = swiper.$wrapperEl.children("[data-swiper-slide-index=\"".concat(slideOriginalIndex, "\"]:not(.").concat(swiper.params.slideDuplicateClass, ")"));
                    swiper.lazy.loadInSlide(originalSlide.index(), false);
                  } else {
                    var duplicatedSlide = swiper.$wrapperEl.children(".".concat(swiper.params.slideDuplicateClass, "[data-swiper-slide-index=\"").concat(slideOriginalIndex, "\"]"));
                    swiper.lazy.loadInSlide(duplicatedSlide.index(), false);
                  }
                }
                swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]);
              });
              swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]);
            });
          },
          load: function load() {
            var swiper = this;
            var $wrapperEl = swiper.$wrapperEl,
              swiperParams = swiper.params,
              slides = swiper.slides,
              activeIndex = swiper.activeIndex;
            var isVirtual = swiper.virtual && swiperParams.virtual.enabled;
            var params = swiperParams.lazy;
            var slidesPerView = swiperParams.slidesPerView;
            if (slidesPerView === 'auto') {
              slidesPerView = 0;
            }
            function slideExist(index) {
              if (isVirtual) {
                if ($wrapperEl.children(".".concat(swiperParams.slideClass, "[data-swiper-slide-index=\"").concat(index, "\"]")).length) {
                  return true;
                }
              } else if (slides[index]) return true;
              return false;
            }
            function slideIndex(slideEl) {
              if (isVirtual) {
                return $(slideEl).attr('data-swiper-slide-index');
              }
              return $(slideEl).index();
            }
            if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true;
            if (swiper.params.watchSlidesVisibility) {
              $wrapperEl.children(".".concat(swiperParams.slideVisibleClass)).each(function (elIndex, slideEl) {
                var index = isVirtual ? $(slideEl).attr('data-swiper-slide-index') : $(slideEl).index();
                swiper.lazy.loadInSlide(index);
              });
            } else if (slidesPerView > 1) {
              for (var i = activeIndex; i < activeIndex + slidesPerView; i += 1) {
                if (slideExist(i)) swiper.lazy.loadInSlide(i);
              }
            } else {
              swiper.lazy.loadInSlide(activeIndex);
            }
            if (params.loadPrevNext) {
              if (slidesPerView > 1 || params.loadPrevNextAmount && params.loadPrevNextAmount > 1) {
                var amount = params.loadPrevNextAmount;
                var spv = slidesPerView;
                var maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length);
                var minIndex = Math.max(activeIndex - Math.max(spv, amount), 0);
                // Next Slides
                for (var _i10 = activeIndex + slidesPerView; _i10 < maxIndex; _i10 += 1) {
                  if (slideExist(_i10)) swiper.lazy.loadInSlide(_i10);
                }
                // Prev Slides
                for (var _i11 = minIndex; _i11 < activeIndex; _i11 += 1) {
                  if (slideExist(_i11)) swiper.lazy.loadInSlide(_i11);
                }
              } else {
                var nextSlide = $wrapperEl.children(".".concat(swiperParams.slideNextClass));
                if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide));
                var prevSlide = $wrapperEl.children(".".concat(swiperParams.slidePrevClass));
                if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide));
              }
            }
          }
        };
        var Lazy$1 = {
          name: 'lazy',
          params: {
            lazy: {
              enabled: false,
              loadPrevNext: false,
              loadPrevNextAmount: 1,
              loadOnTransitionStart: false,
              elementClass: 'swiper-lazy',
              loadingClass: 'swiper-lazy-loading',
              loadedClass: 'swiper-lazy-loaded',
              preloaderClass: 'swiper-lazy-preloader'
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              lazy: {
                initialImageLoaded: false,
                load: Lazy.load.bind(swiper),
                loadInSlide: Lazy.loadInSlide.bind(swiper)
              }
            });
          },
          on: {
            beforeInit: function beforeInit() {
              var swiper = this;
              if (swiper.params.lazy.enabled && swiper.params.preloadImages) {
                swiper.params.preloadImages = false;
              }
            },
            init: function init() {
              var swiper = this;
              if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) {
                swiper.lazy.load();
              }
            },
            scroll: function scroll() {
              var swiper = this;
              if (swiper.params.freeMode && !swiper.params.freeModeSticky) {
                swiper.lazy.load();
              }
            },
            resize: function resize() {
              var swiper = this;
              if (swiper.params.lazy.enabled) {
                swiper.lazy.load();
              }
            },
            scrollbarDragMove: function scrollbarDragMove() {
              var swiper = this;
              if (swiper.params.lazy.enabled) {
                swiper.lazy.load();
              }
            },
            transitionStart: function transitionStart() {
              var swiper = this;
              if (swiper.params.lazy.enabled) {
                if (swiper.params.lazy.loadOnTransitionStart || !swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded) {
                  swiper.lazy.load();
                }
              }
            },
            transitionEnd: function transitionEnd() {
              var swiper = this;
              if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) {
                swiper.lazy.load();
              }
            }
          }
        };

        /* eslint no-bitwise: ["error", { "allow": [">>"] }] */

        var Controller = {
          LinearSpline: function LinearSpline(x, y) {
            var binarySearch = function search() {
              var maxIndex;
              var minIndex;
              var guess;
              return function (array, val) {
                minIndex = -1;
                maxIndex = array.length;
                while (maxIndex - minIndex > 1) {
                  guess = maxIndex + minIndex >> 1;
                  if (array[guess] <= val) {
                    minIndex = guess;
                  } else {
                    maxIndex = guess;
                  }
                }
                return maxIndex;
              };
            }();
            this.x = x;
            this.y = y;
            this.lastIndex = x.length - 1;
            // Given an x value (x2), return the expected y2 value:
            // (x1,y1) is the known point before given value,
            // (x3,y3) is the known point after given value.
            var i1;
            var i3;
            this.interpolate = function interpolate(x2) {
              if (!x2) return 0;

              // Get the indexes of x1 and x3 (the array indexes before and after given x2):
              i3 = binarySearch(this.x, x2);
              i1 = i3 - 1;

              // We have our indexes i1 & i3, so we can calculate already:
              // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1
              return (x2 - this.x[i1]) * (this.y[i3] - this.y[i1]) / (this.x[i3] - this.x[i1]) + this.y[i1];
            };
            return this;
          },
          // xxx: for now i will just save one spline function to to
          getInterpolateFunction: function getInterpolateFunction(c) {
            var swiper = this;
            if (!swiper.controller.spline) {
              swiper.controller.spline = swiper.params.loop ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid);
            }
          },
          setTranslate: function setTranslate(_setTranslate, byController) {
            var swiper = this;
            var controlled = swiper.controller.control;
            var multiplier;
            var controlledTranslate;
            function setControlledTranslate(c) {
              // this will create an Interpolate function based on the snapGrids
              // x is the Grid of the scrolled scroller and y will be the controlled scroller
              // it makes sense to create this only once and recall it for the interpolation
              // the function does a lot of value caching for performance
              var translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate;
              if (swiper.params.controller.by === 'slide') {
                swiper.controller.getInterpolateFunction(c);
                // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid
                // but it did not work out
                controlledTranslate = -swiper.controller.spline.interpolate(-translate);
              }
              if (!controlledTranslate || swiper.params.controller.by === 'container') {
                multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate());
                controlledTranslate = (translate - swiper.minTranslate()) * multiplier + c.minTranslate();
              }
              if (swiper.params.controller.inverse) {
                controlledTranslate = c.maxTranslate() - controlledTranslate;
              }
              c.updateProgress(controlledTranslate);
              c.setTranslate(controlledTranslate, swiper);
              c.updateActiveIndex();
              c.updateSlidesClasses();
            }
            if (Array.isArray(controlled)) {
              for (var i = 0; i < controlled.length; i += 1) {
                if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
                  setControlledTranslate(controlled[i]);
                }
              }
            } else if (controlled instanceof Swiper && byController !== controlled) {
              setControlledTranslate(controlled);
            }
          },
          setTransition: function setTransition(duration, byController) {
            var swiper = this;
            var controlled = swiper.controller.control;
            var i;
            function setControlledTransition(c) {
              c.setTransition(duration, swiper);
              if (duration !== 0) {
                c.transitionStart();
                if (c.params.autoHeight) {
                  Utils.nextTick(function () {
                    c.updateAutoHeight();
                  });
                }
                c.$wrapperEl.transitionEnd(function () {
                  if (!controlled) return;
                  if (c.params.loop && swiper.params.controller.by === 'slide') {
                    c.loopFix();
                  }
                  c.transitionEnd();
                });
              }
            }
            if (Array.isArray(controlled)) {
              for (i = 0; i < controlled.length; i += 1) {
                if (controlled[i] !== byController && controlled[i] instanceof Swiper) {
                  setControlledTransition(controlled[i]);
                }
              }
            } else if (controlled instanceof Swiper && byController !== controlled) {
              setControlledTransition(controlled);
            }
          }
        };
        var Controller$1 = {
          name: 'controller',
          params: {
            controller: {
              control: undefined,
              inverse: false,
              by: 'slide' // or 'container'
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              controller: {
                control: swiper.params.controller.control,
                getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper),
                setTranslate: Controller.setTranslate.bind(swiper),
                setTransition: Controller.setTransition.bind(swiper)
              }
            });
          },
          on: {
            update: function update() {
              var swiper = this;
              if (!swiper.controller.control) return;
              if (swiper.controller.spline) {
                swiper.controller.spline = undefined;
                delete swiper.controller.spline;
              }
            },
            resize: function resize() {
              var swiper = this;
              if (!swiper.controller.control) return;
              if (swiper.controller.spline) {
                swiper.controller.spline = undefined;
                delete swiper.controller.spline;
              }
            },
            observerUpdate: function observerUpdate() {
              var swiper = this;
              if (!swiper.controller.control) return;
              if (swiper.controller.spline) {
                swiper.controller.spline = undefined;
                delete swiper.controller.spline;
              }
            },
            setTranslate: function setTranslate(translate, byController) {
              var swiper = this;
              if (!swiper.controller.control) return;
              swiper.controller.setTranslate(translate, byController);
            },
            setTransition: function setTransition(duration, byController) {
              var swiper = this;
              if (!swiper.controller.control) return;
              swiper.controller.setTransition(duration, byController);
            }
          }
        };
        var a11y = {
          makeElFocusable: function makeElFocusable($el) {
            $el.attr('tabIndex', '0');
            return $el;
          },
          addElRole: function addElRole($el, role) {
            $el.attr('role', role);
            return $el;
          },
          addElLabel: function addElLabel($el, label) {
            $el.attr('aria-label', label);
            return $el;
          },
          disableEl: function disableEl($el) {
            $el.attr('aria-disabled', true);
            return $el;
          },
          enableEl: function enableEl($el) {
            $el.attr('aria-disabled', false);
            return $el;
          },
          onEnterKey: function onEnterKey(e) {
            var swiper = this;
            var params = swiper.params.a11y;
            if (e.keyCode !== 13) return;
            var $targetEl = $(e.target);
            if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) {
              if (!(swiper.isEnd && !swiper.params.loop)) {
                swiper.slideNext();
              }
              if (swiper.isEnd) {
                swiper.a11y.notify(params.lastSlideMessage);
              } else {
                swiper.a11y.notify(params.nextSlideMessage);
              }
            }
            if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) {
              if (!(swiper.isBeginning && !swiper.params.loop)) {
                swiper.slidePrev();
              }
              if (swiper.isBeginning) {
                swiper.a11y.notify(params.firstSlideMessage);
              } else {
                swiper.a11y.notify(params.prevSlideMessage);
              }
            }
            if (swiper.pagination && $targetEl.is(".".concat(swiper.params.pagination.bulletClass))) {
              $targetEl[0].click();
            }
          },
          notify: function notify(message) {
            var swiper = this;
            var notification = swiper.a11y.liveRegion;
            if (notification.length === 0) return;
            notification.html('');
            notification.html(message);
          },
          updateNavigation: function updateNavigation() {
            var swiper = this;
            if (swiper.params.loop) return;
            var _swiper$navigation4 = swiper.navigation,
              $nextEl = _swiper$navigation4.$nextEl,
              $prevEl = _swiper$navigation4.$prevEl;
            if ($prevEl && $prevEl.length > 0) {
              if (swiper.isBeginning) {
                swiper.a11y.disableEl($prevEl);
              } else {
                swiper.a11y.enableEl($prevEl);
              }
            }
            if ($nextEl && $nextEl.length > 0) {
              if (swiper.isEnd) {
                swiper.a11y.disableEl($nextEl);
              } else {
                swiper.a11y.enableEl($nextEl);
              }
            }
          },
          updatePagination: function updatePagination() {
            var swiper = this;
            var params = swiper.params.a11y;
            if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
              swiper.pagination.bullets.each(function (bulletIndex, bulletEl) {
                var $bulletEl = $(bulletEl);
                swiper.a11y.makeElFocusable($bulletEl);
                swiper.a11y.addElRole($bulletEl, 'button');
                swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/{{index}}/, $bulletEl.index() + 1));
              });
            }
          },
          init: function init() {
            var swiper = this;
            swiper.$el.append(swiper.a11y.liveRegion);

            // Navigation
            var params = swiper.params.a11y;
            var $nextEl;
            var $prevEl;
            if (swiper.navigation && swiper.navigation.$nextEl) {
              $nextEl = swiper.navigation.$nextEl;
            }
            if (swiper.navigation && swiper.navigation.$prevEl) {
              $prevEl = swiper.navigation.$prevEl;
            }
            if ($nextEl) {
              swiper.a11y.makeElFocusable($nextEl);
              swiper.a11y.addElRole($nextEl, 'button');
              swiper.a11y.addElLabel($nextEl, params.nextSlideMessage);
              $nextEl.on('keydown', swiper.a11y.onEnterKey);
            }
            if ($prevEl) {
              swiper.a11y.makeElFocusable($prevEl);
              swiper.a11y.addElRole($prevEl, 'button');
              swiper.a11y.addElLabel($prevEl, params.prevSlideMessage);
              $prevEl.on('keydown', swiper.a11y.onEnterKey);
            }

            // Pagination
            if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
              swiper.pagination.$el.on('keydown', ".".concat(swiper.params.pagination.bulletClass), swiper.a11y.onEnterKey);
            }
          },
          destroy: function destroy() {
            var swiper = this;
            if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove();
            var $nextEl;
            var $prevEl;
            if (swiper.navigation && swiper.navigation.$nextEl) {
              $nextEl = swiper.navigation.$nextEl;
            }
            if (swiper.navigation && swiper.navigation.$prevEl) {
              $prevEl = swiper.navigation.$prevEl;
            }
            if ($nextEl) {
              $nextEl.off('keydown', swiper.a11y.onEnterKey);
            }
            if ($prevEl) {
              $prevEl.off('keydown', swiper.a11y.onEnterKey);
            }

            // Pagination
            if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) {
              swiper.pagination.$el.off('keydown', ".".concat(swiper.params.pagination.bulletClass), swiper.a11y.onEnterKey);
            }
          }
        };
        var A11y = {
          name: 'a11y',
          params: {
            a11y: {
              enabled: true,
              notificationClass: 'swiper-notification',
              prevSlideMessage: 'Previous slide',
              nextSlideMessage: 'Next slide',
              firstSlideMessage: 'This is the first slide',
              lastSlideMessage: 'This is the last slide',
              paginationBulletMessage: 'Go to slide {{index}}'
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              a11y: {
                liveRegion: $("<span class=\"".concat(swiper.params.a11y.notificationClass, "\" aria-live=\"assertive\" aria-atomic=\"true\"></span>"))
              }
            });
            Object.keys(a11y).forEach(function (methodName) {
              swiper.a11y[methodName] = a11y[methodName].bind(swiper);
            });
          },
          on: {
            init: function init() {
              var swiper = this;
              if (!swiper.params.a11y.enabled) return;
              swiper.a11y.init();
              swiper.a11y.updateNavigation();
            },
            toEdge: function toEdge() {
              var swiper = this;
              if (!swiper.params.a11y.enabled) return;
              swiper.a11y.updateNavigation();
            },
            fromEdge: function fromEdge() {
              var swiper = this;
              if (!swiper.params.a11y.enabled) return;
              swiper.a11y.updateNavigation();
            },
            paginationUpdate: function paginationUpdate() {
              var swiper = this;
              if (!swiper.params.a11y.enabled) return;
              swiper.a11y.updatePagination();
            },
            destroy: function destroy() {
              var swiper = this;
              if (!swiper.params.a11y.enabled) return;
              swiper.a11y.destroy();
            }
          }
        };
        var History = {
          init: function init() {
            var swiper = this;
            if (!swiper.params.history) return;
            if (!win.history || !win.history.pushState) {
              swiper.params.history.enabled = false;
              swiper.params.hashNavigation.enabled = true;
              return;
            }
            var history = swiper.history;
            history.initialized = true;
            history.paths = History.getPathValues();
            if (!history.paths.key && !history.paths.value) return;
            history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit);
            if (!swiper.params.history.replaceState) {
              win.addEventListener('popstate', swiper.history.setHistoryPopState);
            }
          },
          destroy: function destroy() {
            var swiper = this;
            if (!swiper.params.history.replaceState) {
              win.removeEventListener('popstate', swiper.history.setHistoryPopState);
            }
          },
          setHistoryPopState: function setHistoryPopState() {
            var swiper = this;
            swiper.history.paths = History.getPathValues();
            swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false);
          },
          getPathValues: function getPathValues() {
            var pathArray = win.location.pathname.slice(1).split('/').filter(function (part) {
              return part !== '';
            });
            var total = pathArray.length;
            var key = pathArray[total - 2];
            var value = pathArray[total - 1];
            return {
              key: key,
              value: value
            };
          },
          setHistory: function setHistory(key, index) {
            var swiper = this;
            if (!swiper.history.initialized || !swiper.params.history.enabled) return;
            var slide = swiper.slides.eq(index);
            var value = History.slugify(slide.attr('data-history'));
            if (!win.location.pathname.includes(key)) {
              value = "".concat(key, "/").concat(value);
            }
            var currentState = win.history.state;
            if (currentState && currentState.value === value) {
              return;
            }
            if (swiper.params.history.replaceState) {
              win.history.replaceState({
                value: value
              }, null, value);
            } else {
              win.history.pushState({
                value: value
              }, null, value);
            }
          },
          slugify: function slugify(text) {
            return text.toString().replace(/\s+/g, '-').replace(/[^\w-]+/g, '').replace(/--+/g, '-').replace(/^-+/, '').replace(/-+$/, '');
          },
          scrollToSlide: function scrollToSlide(speed, value, runCallbacks) {
            var swiper = this;
            if (value) {
              for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
                var _slide3 = swiper.slides.eq(i);
                var slideHistory = History.slugify(_slide3.attr('data-history'));
                if (slideHistory === value && !_slide3.hasClass(swiper.params.slideDuplicateClass)) {
                  var _index2 = _slide3.index();
                  swiper.slideTo(_index2, speed, runCallbacks);
                }
              }
            } else {
              swiper.slideTo(0, speed, runCallbacks);
            }
          }
        };
        var History$1 = {
          name: 'history',
          params: {
            history: {
              enabled: false,
              replaceState: false,
              key: 'slides'
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              history: {
                init: History.init.bind(swiper),
                setHistory: History.setHistory.bind(swiper),
                setHistoryPopState: History.setHistoryPopState.bind(swiper),
                scrollToSlide: History.scrollToSlide.bind(swiper),
                destroy: History.destroy.bind(swiper)
              }
            });
          },
          on: {
            init: function init() {
              var swiper = this;
              if (swiper.params.history.enabled) {
                swiper.history.init();
              }
            },
            destroy: function destroy() {
              var swiper = this;
              if (swiper.params.history.enabled) {
                swiper.history.destroy();
              }
            },
            transitionEnd: function transitionEnd() {
              var swiper = this;
              if (swiper.history.initialized) {
                swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex);
              }
            }
          }
        };
        var HashNavigation = {
          onHashCange: function onHashCange() {
            var swiper = this;
            var newHash = doc.location.hash.replace('#', '');
            var activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash');
            if (newHash !== activeSlideHash) {
              var newIndex = swiper.$wrapperEl.children(".".concat(swiper.params.slideClass, "[data-hash=\"").concat(newHash, "\"]")).index();
              if (typeof newIndex === 'undefined') return;
              swiper.slideTo(newIndex);
            }
          },
          setHash: function setHash() {
            var swiper = this;
            if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return;
            if (swiper.params.hashNavigation.replaceState && win.history && win.history.replaceState) {
              win.history.replaceState(null, null, "#".concat(swiper.slides.eq(swiper.activeIndex).attr('data-hash')) || '');
            } else {
              var _slide4 = swiper.slides.eq(swiper.activeIndex);
              var hash = _slide4.attr('data-hash') || _slide4.attr('data-history');
              doc.location.hash = hash || '';
            }
          },
          init: function init() {
            var swiper = this;
            if (!swiper.params.hashNavigation.enabled || swiper.params.history && swiper.params.history.enabled) return;
            swiper.hashNavigation.initialized = true;
            var hash = doc.location.hash.replace('#', '');
            if (hash) {
              var speed = 0;
              for (var i = 0, length = swiper.slides.length; i < length; i += 1) {
                var _slide5 = swiper.slides.eq(i);
                var slideHash = _slide5.attr('data-hash') || _slide5.attr('data-history');
                if (slideHash === hash && !_slide5.hasClass(swiper.params.slideDuplicateClass)) {
                  var _index3 = _slide5.index();
                  swiper.slideTo(_index3, speed, swiper.params.runCallbacksOnInit, true);
                }
              }
            }
            if (swiper.params.hashNavigation.watchState) {
              $(win).on('hashchange', swiper.hashNavigation.onHashCange);
            }
          },
          destroy: function destroy() {
            var swiper = this;
            if (swiper.params.hashNavigation.watchState) {
              $(win).off('hashchange', swiper.hashNavigation.onHashCange);
            }
          }
        };
        var HashNavigation$1 = {
          name: 'hash-navigation',
          params: {
            hashNavigation: {
              enabled: false,
              replaceState: false,
              watchState: false
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              hashNavigation: {
                initialized: false,
                init: HashNavigation.init.bind(swiper),
                destroy: HashNavigation.destroy.bind(swiper),
                setHash: HashNavigation.setHash.bind(swiper),
                onHashCange: HashNavigation.onHashCange.bind(swiper)
              }
            });
          },
          on: {
            init: function init() {
              var swiper = this;
              if (swiper.params.hashNavigation.enabled) {
                swiper.hashNavigation.init();
              }
            },
            destroy: function destroy() {
              var swiper = this;
              if (swiper.params.hashNavigation.enabled) {
                swiper.hashNavigation.destroy();
              }
            },
            transitionEnd: function transitionEnd() {
              var swiper = this;
              if (swiper.hashNavigation.initialized) {
                swiper.hashNavigation.setHash();
              }
            }
          }
        };

        /* eslint no-underscore-dangle: "off" */

        var Autoplay = {
          run: function run() {
            var swiper = this;
            var $activeSlideEl = swiper.slides.eq(swiper.activeIndex);
            var delay = swiper.params.autoplay.delay;
            if ($activeSlideEl.attr('data-swiper-autoplay')) {
              delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay;
            }
            clearTimeout(swiper.autoplay.timeout);
            swiper.autoplay.timeout = Utils.nextTick(function () {
              if (swiper.params.autoplay.reverseDirection) {
                if (swiper.params.loop) {
                  swiper.loopFix();
                  swiper.slidePrev(swiper.params.speed, true, true);
                  swiper.emit('autoplay');
                } else if (!swiper.isBeginning) {
                  swiper.slidePrev(swiper.params.speed, true, true);
                  swiper.emit('autoplay');
                } else if (!swiper.params.autoplay.stopOnLastSlide) {
                  swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true);
                  swiper.emit('autoplay');
                } else {
                  swiper.autoplay.stop();
                }
              } else if (swiper.params.loop) {
                swiper.loopFix();
                swiper.slideNext(swiper.params.speed, true, true);
                swiper.emit('autoplay');
              } else if (!swiper.isEnd) {
                swiper.slideNext(swiper.params.speed, true, true);
                swiper.emit('autoplay');
              } else if (!swiper.params.autoplay.stopOnLastSlide) {
                swiper.slideTo(0, swiper.params.speed, true, true);
                swiper.emit('autoplay');
              } else {
                swiper.autoplay.stop();
              }
            }, delay);
          },
          start: function start() {
            var swiper = this;
            if (typeof swiper.autoplay.timeout !== 'undefined') return false;
            if (swiper.autoplay.running) return false;
            swiper.autoplay.running = true;
            swiper.emit('autoplayStart');
            swiper.autoplay.run();
            return true;
          },
          stop: function stop() {
            var swiper = this;
            if (!swiper.autoplay.running) return false;
            if (typeof swiper.autoplay.timeout === 'undefined') return false;
            if (swiper.autoplay.timeout) {
              clearTimeout(swiper.autoplay.timeout);
              swiper.autoplay.timeout = undefined;
            }
            swiper.autoplay.running = false;
            swiper.emit('autoplayStop');
            return true;
          },
          pause: function pause(speed) {
            var swiper = this;
            if (!swiper.autoplay.running) return;
            if (swiper.autoplay.paused) return;
            if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout);
            swiper.autoplay.paused = true;
            if (speed === 0 || !swiper.params.autoplay.waitForTransition) {
              swiper.autoplay.paused = false;
              swiper.autoplay.run();
            } else {
              swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd);
              swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
            }
          }
        };
        var Autoplay$1 = {
          name: 'autoplay',
          params: {
            autoplay: {
              enabled: false,
              delay: 3000,
              waitForTransition: true,
              disableOnInteraction: true,
              stopOnLastSlide: false,
              reverseDirection: false
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              autoplay: {
                running: false,
                paused: false,
                run: Autoplay.run.bind(swiper),
                start: Autoplay.start.bind(swiper),
                stop: Autoplay.stop.bind(swiper),
                pause: Autoplay.pause.bind(swiper),
                onTransitionEnd: function onTransitionEnd(e) {
                  if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return;
                  if (e.target !== this) return;
                  swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd);
                  swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd);
                  swiper.autoplay.paused = false;
                  if (!swiper.autoplay.running) {
                    swiper.autoplay.stop();
                  } else {
                    swiper.autoplay.run();
                  }
                }
              }
            });
          },
          on: {
            init: function init() {
              var swiper = this;
              if (swiper.params.autoplay.enabled) {
                swiper.autoplay.start();
              }
            },
            beforeTransitionStart: function beforeTransitionStart(speed, internal) {
              var swiper = this;
              if (swiper.autoplay.running) {
                if (internal || !swiper.params.autoplay.disableOnInteraction) {
                  swiper.autoplay.pause(speed);
                } else {
                  swiper.autoplay.stop();
                }
              }
            },
            sliderFirstMove: function sliderFirstMove() {
              var swiper = this;
              if (swiper.autoplay.running) {
                if (swiper.params.autoplay.disableOnInteraction) {
                  swiper.autoplay.stop();
                } else {
                  swiper.autoplay.pause();
                }
              }
            },
            destroy: function destroy() {
              var swiper = this;
              if (swiper.autoplay.running) {
                swiper.autoplay.stop();
              }
            }
          }
        };
        var Fade = {
          setTranslate: function setTranslate() {
            var swiper = this;
            var slides = swiper.slides;
            for (var i = 0; i < slides.length; i += 1) {
              var $slideEl = swiper.slides.eq(i);
              var _offset = $slideEl[0].swiperSlideOffset;
              var tx = -_offset;
              if (!swiper.params.virtualTranslate) tx -= swiper.translate;
              var ty = 0;
              if (!swiper.isHorizontal()) {
                ty = tx;
                tx = 0;
              }
              var slideOpacity = swiper.params.fadeEffect.crossFade ? Math.max(1 - Math.abs($slideEl[0].progress), 0) : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0);
              $slideEl.css({
                opacity: slideOpacity
              }).transform("translate3d(".concat(tx, "px, ").concat(ty, "px, 0px)"));
            }
          },
          setTransition: function setTransition(duration) {
            var swiper = this;
            var slides = swiper.slides,
              $wrapperEl = swiper.$wrapperEl;
            slides.transition(duration);
            if (swiper.params.virtualTranslate && duration !== 0) {
              var eventTriggered = false;
              slides.transitionEnd(function () {
                if (eventTriggered) return;
                if (!swiper || swiper.destroyed) return;
                eventTriggered = true;
                swiper.animating = false;
                var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
                for (var i = 0; i < triggerEvents.length; i += 1) {
                  $wrapperEl.trigger(triggerEvents[i]);
                }
              });
            }
          }
        };
        var EffectFade = {
          name: 'effect-fade',
          params: {
            fadeEffect: {
              crossFade: false
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              fadeEffect: {
                setTranslate: Fade.setTranslate.bind(swiper),
                setTransition: Fade.setTransition.bind(swiper)
              }
            });
          },
          on: {
            beforeInit: function beforeInit() {
              var swiper = this;
              if (swiper.params.effect !== 'fade') return;
              swiper.classNames.push("".concat(swiper.params.containerModifierClass, "fade"));
              var overwriteParams = {
                slidesPerView: 1,
                slidesPerColumn: 1,
                slidesPerGroup: 1,
                watchSlidesProgress: true,
                spaceBetween: 0,
                virtualTranslate: true
              };
              Utils.extend(swiper.params, overwriteParams);
              Utils.extend(swiper.originalParams, overwriteParams);
            },
            setTranslate: function setTranslate() {
              var swiper = this;
              if (swiper.params.effect !== 'fade') return;
              swiper.fadeEffect.setTranslate();
            },
            setTransition: function setTransition(duration) {
              var swiper = this;
              if (swiper.params.effect !== 'fade') return;
              swiper.fadeEffect.setTransition(duration);
            }
          }
        };
        var Cube = {
          setTranslate: function setTranslate() {
            var swiper = this;
            var $el = swiper.$el,
              $wrapperEl = swiper.$wrapperEl,
              slides = swiper.slides,
              swiperWidth = swiper.width,
              swiperHeight = swiper.height,
              rtl = swiper.rtlTranslate,
              swiperSize = swiper.size;
            var params = swiper.params.cubeEffect;
            var isHorizontal = swiper.isHorizontal();
            var isVirtual = swiper.virtual && swiper.params.virtual.enabled;
            var wrapperRotate = 0;
            var $cubeShadowEl;
            if (params.shadow) {
              if (isHorizontal) {
                $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow');
                if ($cubeShadowEl.length === 0) {
                  $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
                  $wrapperEl.append($cubeShadowEl);
                }
                $cubeShadowEl.css({
                  height: "".concat(swiperWidth, "px")
                });
              } else {
                $cubeShadowEl = $el.find('.swiper-cube-shadow');
                if ($cubeShadowEl.length === 0) {
                  $cubeShadowEl = $('<div class="swiper-cube-shadow"></div>');
                  $el.append($cubeShadowEl);
                }
              }
            }
            for (var i = 0; i < slides.length; i += 1) {
              var $slideEl = slides.eq(i);
              var slideIndex = i;
              if (isVirtual) {
                slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10);
              }
              var slideAngle = slideIndex * 90;
              var round = Math.floor(slideAngle / 360);
              if (rtl) {
                slideAngle = -slideAngle;
                round = Math.floor(-slideAngle / 360);
              }
              var progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
              var tx = 0;
              var ty = 0;
              var tz = 0;
              if (slideIndex % 4 === 0) {
                tx = -round * 4 * swiperSize;
                tz = 0;
              } else if ((slideIndex - 1) % 4 === 0) {
                tx = 0;
                tz = -round * 4 * swiperSize;
              } else if ((slideIndex - 2) % 4 === 0) {
                tx = swiperSize + round * 4 * swiperSize;
                tz = swiperSize;
              } else if ((slideIndex - 3) % 4 === 0) {
                tx = -swiperSize;
                tz = 3 * swiperSize + swiperSize * 4 * round;
              }
              if (rtl) {
                tx = -tx;
              }
              if (!isHorizontal) {
                ty = tx;
                tx = 0;
              }
              var _transform = "rotateX(".concat(isHorizontal ? 0 : -slideAngle, "deg) rotateY(").concat(isHorizontal ? slideAngle : 0, "deg) translate3d(").concat(tx, "px, ").concat(ty, "px, ").concat(tz, "px)");
              if (progress <= 1 && progress > -1) {
                wrapperRotate = slideIndex * 90 + progress * 90;
                if (rtl) wrapperRotate = -slideIndex * 90 - progress * 90;
              }
              $slideEl.transform(_transform);
              if (params.slideShadows) {
                // Set shadows
                var shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
                var shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
                if (shadowBefore.length === 0) {
                  shadowBefore = $("<div class=\"swiper-slide-shadow-".concat(isHorizontal ? 'left' : 'top', "\"></div>"));
                  $slideEl.append(shadowBefore);
                }
                if (shadowAfter.length === 0) {
                  shadowAfter = $("<div class=\"swiper-slide-shadow-".concat(isHorizontal ? 'right' : 'bottom', "\"></div>"));
                  $slideEl.append(shadowAfter);
                }
                if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
                if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
              }
            }
            $wrapperEl.css({
              '-webkit-transform-origin': "50% 50% -".concat(swiperSize / 2, "px"),
              '-moz-transform-origin': "50% 50% -".concat(swiperSize / 2, "px"),
              '-ms-transform-origin': "50% 50% -".concat(swiperSize / 2, "px"),
              'transform-origin': "50% 50% -".concat(swiperSize / 2, "px")
            });
            if (params.shadow) {
              if (isHorizontal) {
                $cubeShadowEl.transform("translate3d(0px, ".concat(swiperWidth / 2 + params.shadowOffset, "px, ").concat(-swiperWidth / 2, "px) rotateX(90deg) rotateZ(0deg) scale(").concat(params.shadowScale, ")"));
              } else {
                var shadowAngle = Math.abs(wrapperRotate) - Math.floor(Math.abs(wrapperRotate) / 90) * 90;
                var multiplier = 1.5 - (Math.sin(shadowAngle * 2 * Math.PI / 360) / 2 + Math.cos(shadowAngle * 2 * Math.PI / 360) / 2);
                var scale1 = params.shadowScale;
                var scale2 = params.shadowScale / multiplier;
                var _offset2 = params.shadowOffset;
                $cubeShadowEl.transform("scale3d(".concat(scale1, ", 1, ").concat(scale2, ") translate3d(0px, ").concat(swiperHeight / 2 + _offset2, "px, ").concat(-swiperHeight / 2 / scale2, "px) rotateX(-90deg)"));
              }
            }
            var zFactor = Browser.isSafari || Browser.isUiWebView ? -swiperSize / 2 : 0;
            $wrapperEl.transform("translate3d(0px,0,".concat(zFactor, "px) rotateX(").concat(swiper.isHorizontal() ? 0 : wrapperRotate, "deg) rotateY(").concat(swiper.isHorizontal() ? -wrapperRotate : 0, "deg)"));
          },
          setTransition: function setTransition(duration) {
            var swiper = this;
            var $el = swiper.$el,
              slides = swiper.slides;
            slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
            if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) {
              $el.find('.swiper-cube-shadow').transition(duration);
            }
          }
        };
        var EffectCube = {
          name: 'effect-cube',
          params: {
            cubeEffect: {
              slideShadows: true,
              shadow: true,
              shadowOffset: 20,
              shadowScale: 0.94
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              cubeEffect: {
                setTranslate: Cube.setTranslate.bind(swiper),
                setTransition: Cube.setTransition.bind(swiper)
              }
            });
          },
          on: {
            beforeInit: function beforeInit() {
              var swiper = this;
              if (swiper.params.effect !== 'cube') return;
              swiper.classNames.push("".concat(swiper.params.containerModifierClass, "cube"));
              swiper.classNames.push("".concat(swiper.params.containerModifierClass, "3d"));
              var overwriteParams = {
                slidesPerView: 1,
                slidesPerColumn: 1,
                slidesPerGroup: 1,
                watchSlidesProgress: true,
                resistanceRatio: 0,
                spaceBetween: 0,
                centeredSlides: false,
                virtualTranslate: true
              };
              Utils.extend(swiper.params, overwriteParams);
              Utils.extend(swiper.originalParams, overwriteParams);
            },
            setTranslate: function setTranslate() {
              var swiper = this;
              if (swiper.params.effect !== 'cube') return;
              swiper.cubeEffect.setTranslate();
            },
            setTransition: function setTransition(duration) {
              var swiper = this;
              if (swiper.params.effect !== 'cube') return;
              swiper.cubeEffect.setTransition(duration);
            }
          }
        };
        var Flip = {
          setTranslate: function setTranslate() {
            var swiper = this;
            var slides = swiper.slides,
              rtl = swiper.rtlTranslate;
            for (var i = 0; i < slides.length; i += 1) {
              var $slideEl = slides.eq(i);
              var progress = $slideEl[0].progress;
              if (swiper.params.flipEffect.limitRotation) {
                progress = Math.max(Math.min($slideEl[0].progress, 1), -1);
              }
              var _offset3 = $slideEl[0].swiperSlideOffset;
              var rotate = -180 * progress;
              var rotateY = rotate;
              var rotateX = 0;
              var tx = -_offset3;
              var ty = 0;
              if (!swiper.isHorizontal()) {
                ty = tx;
                tx = 0;
                rotateX = -rotateY;
                rotateY = 0;
              } else if (rtl) {
                rotateY = -rotateY;
              }
              $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length;
              if (swiper.params.flipEffect.slideShadows) {
                // Set shadows
                var shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
                var shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
                if (shadowBefore.length === 0) {
                  shadowBefore = $("<div class=\"swiper-slide-shadow-".concat(swiper.isHorizontal() ? 'left' : 'top', "\"></div>"));
                  $slideEl.append(shadowBefore);
                }
                if (shadowAfter.length === 0) {
                  shadowAfter = $("<div class=\"swiper-slide-shadow-".concat(swiper.isHorizontal() ? 'right' : 'bottom', "\"></div>"));
                  $slideEl.append(shadowAfter);
                }
                if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0);
                if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0);
              }
              $slideEl.transform("translate3d(".concat(tx, "px, ").concat(ty, "px, 0px) rotateX(").concat(rotateX, "deg) rotateY(").concat(rotateY, "deg)"));
            }
          },
          setTransition: function setTransition(duration) {
            var swiper = this;
            var slides = swiper.slides,
              activeIndex = swiper.activeIndex,
              $wrapperEl = swiper.$wrapperEl;
            slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
            if (swiper.params.virtualTranslate && duration !== 0) {
              var eventTriggered = false;
              // eslint-disable-next-line
              slides.eq(activeIndex).transitionEnd(function onTransitionEnd() {
                if (eventTriggered) return;
                if (!swiper || swiper.destroyed) return;
                // if (!$(this).hasClass(swiper.params.slideActiveClass)) return;
                eventTriggered = true;
                swiper.animating = false;
                var triggerEvents = ['webkitTransitionEnd', 'transitionend'];
                for (var i = 0; i < triggerEvents.length; i += 1) {
                  $wrapperEl.trigger(triggerEvents[i]);
                }
              });
            }
          }
        };
        var EffectFlip = {
          name: 'effect-flip',
          params: {
            flipEffect: {
              slideShadows: true,
              limitRotation: true
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              flipEffect: {
                setTranslate: Flip.setTranslate.bind(swiper),
                setTransition: Flip.setTransition.bind(swiper)
              }
            });
          },
          on: {
            beforeInit: function beforeInit() {
              var swiper = this;
              if (swiper.params.effect !== 'flip') return;
              swiper.classNames.push("".concat(swiper.params.containerModifierClass, "flip"));
              swiper.classNames.push("".concat(swiper.params.containerModifierClass, "3d"));
              var overwriteParams = {
                slidesPerView: 1,
                slidesPerColumn: 1,
                slidesPerGroup: 1,
                watchSlidesProgress: true,
                spaceBetween: 0,
                virtualTranslate: true
              };
              Utils.extend(swiper.params, overwriteParams);
              Utils.extend(swiper.originalParams, overwriteParams);
            },
            setTranslate: function setTranslate() {
              var swiper = this;
              if (swiper.params.effect !== 'flip') return;
              swiper.flipEffect.setTranslate();
            },
            setTransition: function setTransition(duration) {
              var swiper = this;
              if (swiper.params.effect !== 'flip') return;
              swiper.flipEffect.setTransition(duration);
            }
          }
        };
        var Coverflow = {
          setTranslate: function setTranslate() {
            var swiper = this;
            var swiperWidth = swiper.width,
              swiperHeight = swiper.height,
              slides = swiper.slides,
              $wrapperEl = swiper.$wrapperEl,
              slidesSizesGrid = swiper.slidesSizesGrid;
            var params = swiper.params.coverflowEffect;
            var isHorizontal = swiper.isHorizontal();
            var transform = swiper.translate;
            var center = isHorizontal ? -transform + swiperWidth / 2 : -transform + swiperHeight / 2;
            var rotate = isHorizontal ? params.rotate : -params.rotate;
            var translate = params.depth;
            // Each slide offset from center
            for (var i = 0, length = slides.length; i < length; i += 1) {
              var $slideEl = slides.eq(i);
              var slideSize = slidesSizesGrid[i];
              var slideOffset = $slideEl[0].swiperSlideOffset;
              var offsetMultiplier = (center - slideOffset - slideSize / 2) / slideSize * params.modifier;
              var rotateY = isHorizontal ? rotate * offsetMultiplier : 0;
              var rotateX = isHorizontal ? 0 : rotate * offsetMultiplier;
              // var rotateZ = 0
              var translateZ = -translate * Math.abs(offsetMultiplier);
              var translateY = isHorizontal ? 0 : params.stretch * offsetMultiplier;
              var translateX = isHorizontal ? params.stretch * offsetMultiplier : 0;

              // Fix for ultra small values
              if (Math.abs(translateX) < 0.001) translateX = 0;
              if (Math.abs(translateY) < 0.001) translateY = 0;
              if (Math.abs(translateZ) < 0.001) translateZ = 0;
              if (Math.abs(rotateY) < 0.001) rotateY = 0;
              if (Math.abs(rotateX) < 0.001) rotateX = 0;
              var slideTransform = "translate3d(".concat(translateX, "px,").concat(translateY, "px,").concat(translateZ, "px)  rotateX(").concat(rotateX, "deg) rotateY(").concat(rotateY, "deg)");
              $slideEl.transform(slideTransform);
              $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1;
              if (params.slideShadows) {
                // Set shadows
                var $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top');
                var $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom');
                if ($shadowBeforeEl.length === 0) {
                  $shadowBeforeEl = $("<div class=\"swiper-slide-shadow-".concat(isHorizontal ? 'left' : 'top', "\"></div>"));
                  $slideEl.append($shadowBeforeEl);
                }
                if ($shadowAfterEl.length === 0) {
                  $shadowAfterEl = $("<div class=\"swiper-slide-shadow-".concat(isHorizontal ? 'right' : 'bottom', "\"></div>"));
                  $slideEl.append($shadowAfterEl);
                }
                if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0;
                if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = -offsetMultiplier > 0 ? -offsetMultiplier : 0;
              }
            }

            // Set correct perspective for IE10
            if (Support.pointerEvents || Support.prefixedPointerEvents) {
              var ws = $wrapperEl[0].style;
              ws.perspectiveOrigin = "".concat(center, "px 50%");
            }
          },
          setTransition: function setTransition(duration) {
            var swiper = this;
            swiper.slides.transition(duration).find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left').transition(duration);
          }
        };
        var EffectCoverflow = {
          name: 'effect-coverflow',
          params: {
            coverflowEffect: {
              rotate: 50,
              stretch: 0,
              depth: 100,
              modifier: 1,
              slideShadows: true
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              coverflowEffect: {
                setTranslate: Coverflow.setTranslate.bind(swiper),
                setTransition: Coverflow.setTransition.bind(swiper)
              }
            });
          },
          on: {
            beforeInit: function beforeInit() {
              var swiper = this;
              if (swiper.params.effect !== 'coverflow') return;
              swiper.classNames.push("".concat(swiper.params.containerModifierClass, "coverflow"));
              swiper.classNames.push("".concat(swiper.params.containerModifierClass, "3d"));
              swiper.params.watchSlidesProgress = true;
              swiper.originalParams.watchSlidesProgress = true;
            },
            setTranslate: function setTranslate() {
              var swiper = this;
              if (swiper.params.effect !== 'coverflow') return;
              swiper.coverflowEffect.setTranslate();
            },
            setTransition: function setTransition(duration) {
              var swiper = this;
              if (swiper.params.effect !== 'coverflow') return;
              swiper.coverflowEffect.setTransition(duration);
            }
          }
        };
        var Thumbs = {
          init: function init() {
            var swiper = this;
            var thumbsParams = swiper.params.thumbs;
            var SwiperClass = swiper.constructor;
            if (thumbsParams.swiper instanceof SwiperClass) {
              swiper.thumbs.swiper = thumbsParams.swiper;
              Utils.extend(swiper.thumbs.swiper.originalParams, {
                watchSlidesProgress: true,
                slideToClickedSlide: false
              });
              Utils.extend(swiper.thumbs.swiper.params, {
                watchSlidesProgress: true,
                slideToClickedSlide: false
              });
            } else if (Utils.isObject(thumbsParams.swiper)) {
              swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, {
                watchSlidesVisibility: true,
                watchSlidesProgress: true,
                slideToClickedSlide: false
              }));
              swiper.thumbs.swiperCreated = true;
            }
            swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass);
            swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick);
          },
          onThumbClick: function onThumbClick() {
            var swiper = this;
            var thumbsSwiper = swiper.thumbs.swiper;
            if (!thumbsSwiper) return;
            var clickedIndex = thumbsSwiper.clickedIndex;
            var clickedSlide = thumbsSwiper.clickedSlide;
            if (clickedSlide && $(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return;
            if (typeof clickedIndex === 'undefined' || clickedIndex === null) return;
            var slideToIndex;
            if (thumbsSwiper.params.loop) {
              slideToIndex = parseInt($(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10);
            } else {
              slideToIndex = clickedIndex;
            }
            if (swiper.params.loop) {
              var currentIndex = swiper.activeIndex;
              if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) {
                swiper.loopFix();
                // eslint-disable-next-line
                swiper._clientLeft = swiper.$wrapperEl[0].clientLeft;
                currentIndex = swiper.activeIndex;
              }
              var prevIndex = swiper.slides.eq(currentIndex).prevAll("[data-swiper-slide-index=\"".concat(slideToIndex, "\"]")).eq(0).index();
              var nextIndex = swiper.slides.eq(currentIndex).nextAll("[data-swiper-slide-index=\"".concat(slideToIndex, "\"]")).eq(0).index();
              if (typeof prevIndex === 'undefined') slideToIndex = nextIndex;else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex;else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex;else slideToIndex = prevIndex;
            }
            swiper.slideTo(slideToIndex);
          },
          update: function update(initial) {
            var swiper = this;
            var thumbsSwiper = swiper.thumbs.swiper;
            if (!thumbsSwiper) return;
            var slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' ? thumbsSwiper.slidesPerViewDynamic() : thumbsSwiper.params.slidesPerView;
            if (swiper.realIndex !== thumbsSwiper.realIndex) {
              var currentThumbsIndex = thumbsSwiper.activeIndex;
              var newThumbsIndex;
              if (thumbsSwiper.params.loop) {
                if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) {
                  thumbsSwiper.loopFix();
                  // eslint-disable-next-line
                  thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft;
                  currentThumbsIndex = thumbsSwiper.activeIndex;
                }
                // Find actual thumbs index to slide to
                var prevThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).prevAll("[data-swiper-slide-index=\"".concat(swiper.realIndex, "\"]")).eq(0).index();
                var nextThumbsIndex = thumbsSwiper.slides.eq(currentThumbsIndex).nextAll("[data-swiper-slide-index=\"".concat(swiper.realIndex, "\"]")).eq(0).index();
                if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex;else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex;else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex;else newThumbsIndex = prevThumbsIndex;
              } else {
                newThumbsIndex = swiper.realIndex;
              }
              if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) {
                if (thumbsSwiper.params.centeredSlides) {
                  if (newThumbsIndex > currentThumbsIndex) {
                    newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1;
                  } else {
                    newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1;
                  }
                } else if (newThumbsIndex > currentThumbsIndex) {
                  newThumbsIndex = newThumbsIndex - slidesPerView + 1;
                }
                thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined);
              }
            }

            // Activate thumbs
            var thumbsToActivate = 1;
            var thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass;
            if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) {
              thumbsToActivate = swiper.params.slidesPerView;
            }
            thumbsSwiper.slides.removeClass(thumbActiveClass);
            if (thumbsSwiper.params.loop || thumbsSwiper.params.virtual) {
              for (var i = 0; i < thumbsToActivate; i += 1) {
                thumbsSwiper.$wrapperEl.children("[data-swiper-slide-index=\"".concat(swiper.realIndex + i, "\"]")).addClass(thumbActiveClass);
              }
            } else {
              for (var _i12 = 0; _i12 < thumbsToActivate; _i12 += 1) {
                thumbsSwiper.slides.eq(swiper.realIndex + _i12).addClass(thumbActiveClass);
              }
            }
          }
        };
        var Thumbs$1 = {
          name: 'thumbs',
          params: {
            thumbs: {
              swiper: null,
              slideThumbActiveClass: 'swiper-slide-thumb-active',
              thumbsContainerClass: 'swiper-container-thumbs'
            }
          },
          create: function create() {
            var swiper = this;
            Utils.extend(swiper, {
              thumbs: {
                swiper: null,
                init: Thumbs.init.bind(swiper),
                update: Thumbs.update.bind(swiper),
                onThumbClick: Thumbs.onThumbClick.bind(swiper)
              }
            });
          },
          on: {
            beforeInit: function beforeInit() {
              var swiper = this;
              var thumbs = swiper.params.thumbs;
              if (!thumbs || !thumbs.swiper) return;
              swiper.thumbs.init();
              swiper.thumbs.update(true);
            },
            slideChange: function slideChange() {
              var swiper = this;
              if (!swiper.thumbs.swiper) return;
              swiper.thumbs.update();
            },
            update: function update() {
              var swiper = this;
              if (!swiper.thumbs.swiper) return;
              swiper.thumbs.update();
            },
            resize: function resize() {
              var swiper = this;
              if (!swiper.thumbs.swiper) return;
              swiper.thumbs.update();
            },
            observerUpdate: function observerUpdate() {
              var swiper = this;
              if (!swiper.thumbs.swiper) return;
              swiper.thumbs.update();
            },
            setTransition: function setTransition(duration) {
              var swiper = this;
              var thumbsSwiper = swiper.thumbs.swiper;
              if (!thumbsSwiper) return;
              thumbsSwiper.setTransition(duration);
            },
            beforeDestroy: function beforeDestroy() {
              var swiper = this;
              var thumbsSwiper = swiper.thumbs.swiper;
              if (!thumbsSwiper) return;
              if (swiper.thumbs.swiperCreated && thumbsSwiper) {
                thumbsSwiper.destroy();
              }
            }
          }
        };

        // Swiper Class

        var components = [Device$1, Support$1, Browser$1, Resize, Observer$1, Virtual$1, Keyboard$1, Mousewheel$1, Navigation$1, Pagination$1, Scrollbar$1, Parallax$1, Zoom$1, Lazy$1, Controller$1, A11y, History$1, HashNavigation$1, Autoplay$1, EffectFade, EffectCube, EffectFlip, EffectCoverflow, Thumbs$1];
        if (typeof Swiper.use === 'undefined') {
          Swiper.use = Swiper.Class.use;
          Swiper.installModule = Swiper.Class.installModule;
        }
        Swiper.use(components);

        /** Detect free variable `global` from Node.js. */
        var freeGlobal = (typeof global === "undefined" ? "undefined" : _typeof(global)) == 'object' && global && global.Object === Object && global;
        var freeGlobal$1 = freeGlobal;

        /** Detect free variable `self`. */
        var freeSelf = (typeof self === "undefined" ? "undefined" : _typeof(self)) == 'object' && self && self.Object === Object && self;

        /** Used as a reference to the global object. */
        var root = freeGlobal$1 || freeSelf || Function('return this')();
        var root$1 = root;

        /** Built-in value references. */
        var Symbol$1 = root$1.Symbol;
        var Symbol$2 = Symbol$1;

        /** Used for built-in method references. */
        var objectProto$b = Object.prototype;

        /** Used to check objects for own properties. */
        var hasOwnProperty$8 = objectProto$b.hasOwnProperty;

        /**
         * Used to resolve the
         * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
         * of values.
         */
        var nativeObjectToString$1 = objectProto$b.toString;

        /** Built-in value references. */
        var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : undefined;

        /**
         * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
         *
         * @private
         * @param {*} value The value to query.
         * @returns {string} Returns the raw `toStringTag`.
         */
        function getRawTag(value) {
          var isOwn = hasOwnProperty$8.call(value, symToStringTag$1),
            tag = value[symToStringTag$1];
          try {
            value[symToStringTag$1] = undefined;
            var unmasked = true;
          } catch (e) {}
          var result = nativeObjectToString$1.call(value);
          if (unmasked) {
            if (isOwn) {
              value[symToStringTag$1] = tag;
            } else {
              delete value[symToStringTag$1];
            }
          }
          return result;
        }

        /** Used for built-in method references. */
        var objectProto$a = Object.prototype;

        /**
         * Used to resolve the
         * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
         * of values.
         */
        var nativeObjectToString = objectProto$a.toString;

        /**
         * Converts `value` to a string using `Object.prototype.toString`.
         *
         * @private
         * @param {*} value The value to convert.
         * @returns {string} Returns the converted string.
         */
        function objectToString(value) {
          return nativeObjectToString.call(value);
        }

        /** `Object#toString` result references. */
        var nullTag = '[object Null]',
          undefinedTag = '[object Undefined]';

        /** Built-in value references. */
        var symToStringTag = Symbol$2 ? Symbol$2.toStringTag : undefined;

        /**
         * The base implementation of `getTag` without fallbacks for buggy environments.
         *
         * @private
         * @param {*} value The value to query.
         * @returns {string} Returns the `toStringTag`.
         */
        function baseGetTag(value) {
          if (value == null) {
            return value === undefined ? undefinedTag : nullTag;
          }
          return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);
        }

        /**
         * Checks if `value` is object-like. A value is object-like if it's not `null`
         * and has a `typeof` result of "object".
         *
         * @static
         * @memberOf _
         * @since 4.0.0
         * @category Lang
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
         * @example
         *
         * _.isObjectLike({});
         * // => true
         *
         * _.isObjectLike([1, 2, 3]);
         * // => true
         *
         * _.isObjectLike(_.noop);
         * // => false
         *
         * _.isObjectLike(null);
         * // => false
         */
        function isObjectLike(value) {
          return value != null && _typeof(value) == 'object';
        }

        /** `Object#toString` result references. */
        var symbolTag$1 = '[object Symbol]';

        /**
         * Checks if `value` is classified as a `Symbol` primitive or object.
         *
         * @static
         * @memberOf _
         * @since 4.0.0
         * @category Lang
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
         * @example
         *
         * _.isSymbol(Symbol.iterator);
         * // => true
         *
         * _.isSymbol('abc');
         * // => false
         */
        function isSymbol(value) {
          return _typeof(value) == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag$1;
        }

        /**
         * A specialized version of `_.map` for arrays without support for iteratee
         * shorthands.
         *
         * @private
         * @param {Array} [array] The array to iterate over.
         * @param {Function} iteratee The function invoked per iteration.
         * @returns {Array} Returns the new mapped array.
         */
        function arrayMap(array, iteratee) {
          var index = -1,
            length = array == null ? 0 : array.length,
            result = Array(length);
          while (++index < length) {
            result[index] = iteratee(array[index], index, array);
          }
          return result;
        }

        /**
         * Checks if `value` is classified as an `Array` object.
         *
         * @static
         * @memberOf _
         * @since 0.1.0
         * @category Lang
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is an array, else `false`.
         * @example
         *
         * _.isArray([1, 2, 3]);
         * // => true
         *
         * _.isArray(document.body.children);
         * // => false
         *
         * _.isArray('abc');
         * // => false
         *
         * _.isArray(_.noop);
         * // => false
         */
        var isArray = Array.isArray;
        var isArray$1 = isArray;

        /** Used as references for various `Number` constants. */
        var INFINITY$2 = 1 / 0;

        /** Used to convert symbols to primitives and strings. */
        var symbolProto$1 = Symbol$2 ? Symbol$2.prototype : undefined,
          symbolToString = symbolProto$1 ? symbolProto$1.toString : undefined;

        /**
         * The base implementation of `_.toString` which doesn't convert nullish
         * values to empty strings.
         *
         * @private
         * @param {*} value The value to process.
         * @returns {string} Returns the string.
         */
        function baseToString(value) {
          // Exit early for strings to avoid a performance hit in some environments.
          if (typeof value == 'string') {
            return value;
          }
          if (isArray$1(value)) {
            // Recursively convert values (susceptible to call stack limits).
            return arrayMap(value, baseToString) + '';
          }
          if (isSymbol(value)) {
            return symbolToString ? symbolToString.call(value) : '';
          }
          var result = value + '';
          return result == '0' && 1 / value == -INFINITY$2 ? '-0' : result;
        }

        /** Used to match a single whitespace character. */
        var reWhitespace = /\s/;

        /**
         * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
         * character of `string`.
         *
         * @private
         * @param {string} string The string to inspect.
         * @returns {number} Returns the index of the last non-whitespace character.
         */
        function trimmedEndIndex(string) {
          var index = string.length;
          while (index-- && reWhitespace.test(string.charAt(index))) {}
          return index;
        }

        /** Used to match leading whitespace. */
        var reTrimStart = /^\s+/;

        /**
         * The base implementation of `_.trim`.
         *
         * @private
         * @param {string} string The string to trim.
         * @returns {string} Returns the trimmed string.
         */
        function baseTrim(string) {
          return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string;
        }

        /**
         * Checks if `value` is the
         * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
         * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
         *
         * @static
         * @memberOf _
         * @since 0.1.0
         * @category Lang
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is an object, else `false`.
         * @example
         *
         * _.isObject({});
         * // => true
         *
         * _.isObject([1, 2, 3]);
         * // => true
         *
         * _.isObject(_.noop);
         * // => true
         *
         * _.isObject(null);
         * // => false
         */
        function isObject(value) {
          var type = _typeof(value);
          return value != null && (type == 'object' || type == 'function');
        }

        /** Used as references for various `Number` constants. */
        var NAN = 0 / 0;

        /** Used to detect bad signed hexadecimal string values. */
        var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;

        /** Used to detect binary string values. */
        var reIsBinary = /^0b[01]+$/i;

        /** Used to detect octal string values. */
        var reIsOctal = /^0o[0-7]+$/i;

        /** Built-in method references without a dependency on `root`. */
        var freeParseInt = parseInt;

        /**
         * Converts `value` to a number.
         *
         * @static
         * @memberOf _
         * @since 4.0.0
         * @category Lang
         * @param {*} value The value to process.
         * @returns {number} Returns the number.
         * @example
         *
         * _.toNumber(3.2);
         * // => 3.2
         *
         * _.toNumber(Number.MIN_VALUE);
         * // => 5e-324
         *
         * _.toNumber(Infinity);
         * // => Infinity
         *
         * _.toNumber('3.2');
         * // => 3.2
         */
        function toNumber(value) {
          if (typeof value == 'number') {
            return value;
          }
          if (isSymbol(value)) {
            return NAN;
          }
          if (isObject(value)) {
            var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
            value = isObject(other) ? other + '' : other;
          }
          if (typeof value != 'string') {
            return value === 0 ? value : +value;
          }
          value = baseTrim(value);
          var isBinary = reIsBinary.test(value);
          return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
        }

        /** Used as references for various `Number` constants. */
        var INFINITY$1 = 1 / 0,
          MAX_INTEGER = 1.7976931348623157e+308;

        /**
         * Converts `value` to a finite number.
         *
         * @static
         * @memberOf _
         * @since 4.12.0
         * @category Lang
         * @param {*} value The value to convert.
         * @returns {number} Returns the converted number.
         * @example
         *
         * _.toFinite(3.2);
         * // => 3.2
         *
         * _.toFinite(Number.MIN_VALUE);
         * // => 5e-324
         *
         * _.toFinite(Infinity);
         * // => 1.7976931348623157e+308
         *
         * _.toFinite('3.2');
         * // => 3.2
         */
        function toFinite(value) {
          if (!value) {
            return value === 0 ? value : 0;
          }
          value = toNumber(value);
          if (value === INFINITY$1 || value === -INFINITY$1) {
            var sign = value < 0 ? -1 : 1;
            return sign * MAX_INTEGER;
          }
          return value === value ? value : 0;
        }

        /**
         * Converts `value` to an integer.
         *
         * **Note:** This method is loosely based on
         * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
         *
         * @static
         * @memberOf _
         * @since 4.0.0
         * @category Lang
         * @param {*} value The value to convert.
         * @returns {number} Returns the converted integer.
         * @example
         *
         * _.toInteger(3.2);
         * // => 3
         *
         * _.toInteger(Number.MIN_VALUE);
         * // => 0
         *
         * _.toInteger(Infinity);
         * // => 1.7976931348623157e+308
         *
         * _.toInteger('3.2');
         * // => 3
         */
        function toInteger(value) {
          var result = toFinite(value),
            remainder = result % 1;
          return result === result ? remainder ? result - remainder : result : 0;
        }

        /**
         * This method returns the first argument it receives.
         *
         * @static
         * @since 0.1.0
         * @memberOf _
         * @category Util
         * @param {*} value Any value.
         * @returns {*} Returns `value`.
         * @example
         *
         * var object = { 'a': 1 };
         *
         * console.log(_.identity(object) === object);
         * // => true
         */
        function identity(value) {
          return value;
        }

        /** `Object#toString` result references. */
        var asyncTag = '[object AsyncFunction]',
          funcTag$1 = '[object Function]',
          genTag = '[object GeneratorFunction]',
          proxyTag = '[object Proxy]';

        /**
         * Checks if `value` is classified as a `Function` object.
         *
         * @static
         * @memberOf _
         * @since 0.1.0
         * @category Lang
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is a function, else `false`.
         * @example
         *
         * _.isFunction(_);
         * // => true
         *
         * _.isFunction(/abc/);
         * // => false
         */
        function isFunction(value) {
          if (!isObject(value)) {
            return false;
          }
          // The use of `Object#toString` avoids issues with the `typeof` operator
          // in Safari 9 which returns 'object' for typed arrays and other constructors.
          var tag = baseGetTag(value);
          return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag;
        }

        /** Used to detect overreaching core-js shims. */
        var coreJsData = root$1['__core-js_shared__'];
        var coreJsData$1 = coreJsData;

        /** Used to detect methods masquerading as native. */
        var maskSrcKey = function () {
          var uid = /[^.]+$/.exec(coreJsData$1 && coreJsData$1.keys && coreJsData$1.keys.IE_PROTO || '');
          return uid ? 'Symbol(src)_1.' + uid : '';
        }();

        /**
         * Checks if `func` has its source masked.
         *
         * @private
         * @param {Function} func The function to check.
         * @returns {boolean} Returns `true` if `func` is masked, else `false`.
         */
        function isMasked(func) {
          return !!maskSrcKey && maskSrcKey in func;
        }

        /** Used for built-in method references. */
        var funcProto$1 = Function.prototype;

        /** Used to resolve the decompiled source of functions. */
        var funcToString$1 = funcProto$1.toString;

        /**
         * Converts `func` to its source code.
         *
         * @private
         * @param {Function} func The function to convert.
         * @returns {string} Returns the source code.
         */
        function toSource(func) {
          if (func != null) {
            try {
              return funcToString$1.call(func);
            } catch (e) {}
            try {
              return func + '';
            } catch (e) {}
          }
          return '';
        }

        /**
         * Used to match `RegExp`
         * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
         */
        var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;

        /** Used to detect host constructors (Safari). */
        var reIsHostCtor = /^\[object .+?Constructor\]$/;

        /** Used for built-in method references. */
        var funcProto = Function.prototype,
          objectProto$9 = Object.prototype;

        /** Used to resolve the decompiled source of functions. */
        var funcToString = funcProto.toString;

        /** Used to check objects for own properties. */
        var hasOwnProperty$7 = objectProto$9.hasOwnProperty;

        /** Used to detect if a method is native. */
        var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty$7).replace(reRegExpChar, '\\$&').replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$');

        /**
         * The base implementation of `_.isNative` without bad shim checks.
         *
         * @private
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is a native function,
         *  else `false`.
         */
        function baseIsNative(value) {
          if (!isObject(value) || isMasked(value)) {
            return false;
          }
          var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
          return pattern.test(toSource(value));
        }

        /**
         * Gets the value at `key` of `object`.
         *
         * @private
         * @param {Object} [object] The object to query.
         * @param {string} key The key of the property to get.
         * @returns {*} Returns the property value.
         */
        function getValue(object, key) {
          return object == null ? undefined : object[key];
        }

        /**
         * Gets the native function at `key` of `object`.
         *
         * @private
         * @param {Object} object The object to query.
         * @param {string} key The key of the method to get.
         * @returns {*} Returns the function if it's native, else `undefined`.
         */
        function getNative(object, key) {
          var value = getValue(object, key);
          return baseIsNative(value) ? value : undefined;
        }

        /* Built-in method references that are verified to be native. */
        var WeakMap = getNative(root$1, 'WeakMap');
        var WeakMap$1 = WeakMap;

        /**
         * The base implementation of `_.findIndex` and `_.findLastIndex` without
         * support for iteratee shorthands.
         *
         * @private
         * @param {Array} array The array to inspect.
         * @param {Function} predicate The function invoked per iteration.
         * @param {number} fromIndex The index to search from.
         * @param {boolean} [fromRight] Specify iterating from right to left.
         * @returns {number} Returns the index of the matched value, else `-1`.
         */
        function baseFindIndex(array, predicate, fromIndex, fromRight) {
          var length = array.length,
            index = fromIndex + (fromRight ? 1 : -1);
          while (fromRight ? index-- : ++index < length) {
            if (predicate(array[index], index, array)) {
              return index;
            }
          }
          return -1;
        }

        /** Used as references for various `Number` constants. */
        var MAX_SAFE_INTEGER$1 = 9007199254740991;

        /** Used to detect unsigned integer values. */
        var reIsUint = /^(?:0|[1-9]\d*)$/;

        /**
         * Checks if `value` is a valid array-like index.
         *
         * @private
         * @param {*} value The value to check.
         * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
         * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
         */
        function isIndex(value, length) {
          var type = _typeof(value);
          length = length == null ? MAX_SAFE_INTEGER$1 : length;
          return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;
        }

        /**
         * Performs a
         * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
         * comparison between two values to determine if they are equivalent.
         *
         * @static
         * @memberOf _
         * @since 4.0.0
         * @category Lang
         * @param {*} value The value to compare.
         * @param {*} other The other value to compare.
         * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
         * @example
         *
         * var object = { 'a': 1 };
         * var other = { 'a': 1 };
         *
         * _.eq(object, object);
         * // => true
         *
         * _.eq(object, other);
         * // => false
         *
         * _.eq('a', 'a');
         * // => true
         *
         * _.eq('a', Object('a'));
         * // => false
         *
         * _.eq(NaN, NaN);
         * // => true
         */
        function eq(value, other) {
          return value === other || value !== value && other !== other;
        }

        /** Used as references for various `Number` constants. */
        var MAX_SAFE_INTEGER = 9007199254740991;

        /**
         * Checks if `value` is a valid array-like length.
         *
         * **Note:** This method is loosely based on
         * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
         *
         * @static
         * @memberOf _
         * @since 4.0.0
         * @category Lang
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
         * @example
         *
         * _.isLength(3);
         * // => true
         *
         * _.isLength(Number.MIN_VALUE);
         * // => false
         *
         * _.isLength(Infinity);
         * // => false
         *
         * _.isLength('3');
         * // => false
         */
        function isLength(value) {
          return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
        }

        /**
         * Checks if `value` is array-like. A value is considered array-like if it's
         * not a function and has a `value.length` that's an integer greater than or
         * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
         *
         * @static
         * @memberOf _
         * @since 4.0.0
         * @category Lang
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
         * @example
         *
         * _.isArrayLike([1, 2, 3]);
         * // => true
         *
         * _.isArrayLike(document.body.children);
         * // => true
         *
         * _.isArrayLike('abc');
         * // => true
         *
         * _.isArrayLike(_.noop);
         * // => false
         */
        function isArrayLike(value) {
          return value != null && isLength(value.length) && !isFunction(value);
        }

        /** Used for built-in method references. */
        var objectProto$8 = Object.prototype;

        /**
         * Checks if `value` is likely a prototype object.
         *
         * @private
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
         */
        function isPrototype(value) {
          var Ctor = value && value.constructor,
            proto = typeof Ctor == 'function' && Ctor.prototype || objectProto$8;
          return value === proto;
        }

        /**
         * The base implementation of `_.times` without support for iteratee shorthands
         * or max array length checks.
         *
         * @private
         * @param {number} n The number of times to invoke `iteratee`.
         * @param {Function} iteratee The function invoked per iteration.
         * @returns {Array} Returns the array of results.
         */
        function baseTimes(n, iteratee) {
          var index = -1,
            result = Array(n);
          while (++index < n) {
            result[index] = iteratee(index);
          }
          return result;
        }

        /** `Object#toString` result references. */
        var argsTag$2 = '[object Arguments]';

        /**
         * The base implementation of `_.isArguments`.
         *
         * @private
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is an `arguments` object,
         */
        function baseIsArguments(value) {
          return isObjectLike(value) && baseGetTag(value) == argsTag$2;
        }

        /** Used for built-in method references. */
        var objectProto$7 = Object.prototype;

        /** Used to check objects for own properties. */
        var hasOwnProperty$6 = objectProto$7.hasOwnProperty;

        /** Built-in value references. */
        var propertyIsEnumerable$1 = objectProto$7.propertyIsEnumerable;

        /**
         * Checks if `value` is likely an `arguments` object.
         *
         * @static
         * @memberOf _
         * @since 0.1.0
         * @category Lang
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is an `arguments` object,
         *  else `false`.
         * @example
         *
         * _.isArguments(function() { return arguments; }());
         * // => true
         *
         * _.isArguments([1, 2, 3]);
         * // => false
         */
        var isArguments = baseIsArguments(function () {
          return arguments;
        }()) ? baseIsArguments : function (value) {
          return isObjectLike(value) && hasOwnProperty$6.call(value, 'callee') && !propertyIsEnumerable$1.call(value, 'callee');
        };
        var isArguments$1 = isArguments;

        /**
         * This method returns `false`.
         *
         * @static
         * @memberOf _
         * @since 4.13.0
         * @category Util
         * @returns {boolean} Returns `false`.
         * @example
         *
         * _.times(2, _.stubFalse);
         * // => [false, false]
         */
        function stubFalse() {
          return false;
        }

        /** Detect free variable `exports`. */
        var freeExports$1 = _typeof(exports) == 'object' && exports && !exports.nodeType && exports;

        /** Detect free variable `module`. */
        var freeModule$1 = freeExports$1 && _typeof(module) == 'object' && module && !module.nodeType && module;

        /** Detect the popular CommonJS extension `module.exports`. */
        var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1;

        /** Built-in value references. */
        var Buffer = moduleExports$1 ? root$1.Buffer : undefined;

        /* Built-in method references for those with the same name as other `lodash` methods. */
        var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;

        /**
         * Checks if `value` is a buffer.
         *
         * @static
         * @memberOf _
         * @since 4.3.0
         * @category Lang
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
         * @example
         *
         * _.isBuffer(new Buffer(2));
         * // => true
         *
         * _.isBuffer(new Uint8Array(2));
         * // => false
         */
        var isBuffer = nativeIsBuffer || stubFalse;
        var isBuffer$1 = isBuffer;

        /** `Object#toString` result references. */
        var argsTag$1 = '[object Arguments]',
          arrayTag$1 = '[object Array]',
          boolTag$1 = '[object Boolean]',
          dateTag$1 = '[object Date]',
          errorTag$1 = '[object Error]',
          funcTag = '[object Function]',
          mapTag$2 = '[object Map]',
          numberTag$1 = '[object Number]',
          objectTag$2 = '[object Object]',
          regexpTag$1 = '[object RegExp]',
          setTag$2 = '[object Set]',
          stringTag$1 = '[object String]',
          weakMapTag$1 = '[object WeakMap]';
        var arrayBufferTag$1 = '[object ArrayBuffer]',
          dataViewTag$2 = '[object DataView]',
          float32Tag = '[object Float32Array]',
          float64Tag = '[object Float64Array]',
          int8Tag = '[object Int8Array]',
          int16Tag = '[object Int16Array]',
          int32Tag = '[object Int32Array]',
          uint8Tag = '[object Uint8Array]',
          uint8ClampedTag = '[object Uint8ClampedArray]',
          uint16Tag = '[object Uint16Array]',
          uint32Tag = '[object Uint32Array]';

        /** Used to identify `toStringTag` values of typed arrays. */
        var typedArrayTags = {};
        typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
        typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag$1] = typedArrayTags[boolTag$1] = typedArrayTags[dataViewTag$2] = typedArrayTags[dateTag$1] = typedArrayTags[errorTag$1] = typedArrayTags[funcTag] = typedArrayTags[mapTag$2] = typedArrayTags[numberTag$1] = typedArrayTags[objectTag$2] = typedArrayTags[regexpTag$1] = typedArrayTags[setTag$2] = typedArrayTags[stringTag$1] = typedArrayTags[weakMapTag$1] = false;

        /**
         * The base implementation of `_.isTypedArray` without Node.js optimizations.
         *
         * @private
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
         */
        function baseIsTypedArray(value) {
          return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
        }

        /**
         * The base implementation of `_.unary` without support for storing metadata.
         *
         * @private
         * @param {Function} func The function to cap arguments for.
         * @returns {Function} Returns the new capped function.
         */
        function baseUnary(func) {
          return function (value) {
            return func(value);
          };
        }

        /** Detect free variable `exports`. */
        var freeExports = _typeof(exports) == 'object' && exports && !exports.nodeType && exports;

        /** Detect free variable `module`. */
        var freeModule = freeExports && _typeof(module) == 'object' && module && !module.nodeType && module;

        /** Detect the popular CommonJS extension `module.exports`. */
        var moduleExports = freeModule && freeModule.exports === freeExports;

        /** Detect free variable `process` from Node.js. */
        var freeProcess = moduleExports && freeGlobal$1.process;

        /** Used to access faster Node.js helpers. */
        var nodeUtil = function () {
          try {
            // Use `util.types` for Node.js 10+.
            var types = freeModule && freeModule.require && freeModule.require('util').types;
            if (types) {
              return types;
            }

            // Legacy `process.binding('util')` for Node.js < 10.
            return freeProcess && freeProcess.binding && freeProcess.binding('util');
          } catch (e) {}
        }();
        var nodeUtil$1 = nodeUtil;

        /* Node.js helper references. */
        var nodeIsTypedArray = nodeUtil$1 && nodeUtil$1.isTypedArray;

        /**
         * Checks if `value` is classified as a typed array.
         *
         * @static
         * @memberOf _
         * @since 3.0.0
         * @category Lang
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
         * @example
         *
         * _.isTypedArray(new Uint8Array);
         * // => true
         *
         * _.isTypedArray([]);
         * // => false
         */
        var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
        var isTypedArray$1 = isTypedArray;

        /** Used for built-in method references. */
        var objectProto$6 = Object.prototype;

        /** Used to check objects for own properties. */
        var hasOwnProperty$5 = objectProto$6.hasOwnProperty;

        /**
         * Creates an array of the enumerable property names of the array-like `value`.
         *
         * @private
         * @param {*} value The value to query.
         * @param {boolean} inherited Specify returning inherited property names.
         * @returns {Array} Returns the array of property names.
         */
        function arrayLikeKeys(value, inherited) {
          var isArr = isArray$1(value),
            isArg = !isArr && isArguments$1(value),
            isBuff = !isArr && !isArg && isBuffer$1(value),
            isType = !isArr && !isArg && !isBuff && isTypedArray$1(value),
            skipIndexes = isArr || isArg || isBuff || isType,
            result = skipIndexes ? baseTimes(value.length, String) : [],
            length = result.length;
          for (var key in value) {
            if ((inherited || hasOwnProperty$5.call(value, key)) && !(skipIndexes && (
            // Safari 9 has enumerable `arguments.length` in strict mode.
            key == 'length' ||
            // Node.js 0.10 has enumerable non-index properties on buffers.
            isBuff && (key == 'offset' || key == 'parent') ||
            // PhantomJS 2 has enumerable non-index properties on typed arrays.
            isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') ||
            // Skip index properties.
            isIndex(key, length)))) {
              result.push(key);
            }
          }
          return result;
        }

        /**
         * Creates a unary function that invokes `func` with its argument transformed.
         *
         * @private
         * @param {Function} func The function to wrap.
         * @param {Function} transform The argument transform.
         * @returns {Function} Returns the new function.
         */
        function overArg(func, transform) {
          return function (arg) {
            return func(transform(arg));
          };
        }

        /* Built-in method references for those with the same name as other `lodash` methods. */
        var nativeKeys = overArg(Object.keys, Object);
        var nativeKeys$1 = nativeKeys;

        /** Used for built-in method references. */
        var objectProto$5 = Object.prototype;

        /** Used to check objects for own properties. */
        var hasOwnProperty$4 = objectProto$5.hasOwnProperty;

        /**
         * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
         *
         * @private
         * @param {Object} object The object to query.
         * @returns {Array} Returns the array of property names.
         */
        function baseKeys(object) {
          if (!isPrototype(object)) {
            return nativeKeys$1(object);
          }
          var result = [];
          for (var key in Object(object)) {
            if (hasOwnProperty$4.call(object, key) && key != 'constructor') {
              result.push(key);
            }
          }
          return result;
        }

        /**
         * Creates an array of the own enumerable property names of `object`.
         *
         * **Note:** Non-object values are coerced to objects. See the
         * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
         * for more details.
         *
         * @static
         * @since 0.1.0
         * @memberOf _
         * @category Object
         * @param {Object} object The object to query.
         * @returns {Array} Returns the array of property names.
         * @example
         *
         * function Foo() {
         *   this.a = 1;
         *   this.b = 2;
         * }
         *
         * Foo.prototype.c = 3;
         *
         * _.keys(new Foo);
         * // => ['a', 'b'] (iteration order is not guaranteed)
         *
         * _.keys('hi');
         * // => ['0', '1']
         */
        function keys(object) {
          return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
        }

        /** Used to match property names within property paths. */
        var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
          reIsPlainProp = /^\w*$/;

        /**
         * Checks if `value` is a property name and not a property path.
         *
         * @private
         * @param {*} value The value to check.
         * @param {Object} [object] The object to query keys on.
         * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
         */
        function isKey(value, object) {
          if (isArray$1(value)) {
            return false;
          }
          var type = _typeof(value);
          if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) {
            return true;
          }
          return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);
        }

        /* Built-in method references that are verified to be native. */
        var nativeCreate = getNative(Object, 'create');
        var nativeCreate$1 = nativeCreate;

        /**
         * Removes all key-value entries from the hash.
         *
         * @private
         * @name clear
         * @memberOf Hash
         */
        function hashClear() {
          this.__data__ = nativeCreate$1 ? nativeCreate$1(null) : {};
          this.size = 0;
        }

        /**
         * Removes `key` and its value from the hash.
         *
         * @private
         * @name delete
         * @memberOf Hash
         * @param {Object} hash The hash to modify.
         * @param {string} key The key of the value to remove.
         * @returns {boolean} Returns `true` if the entry was removed, else `false`.
         */
        function hashDelete(key) {
          var result = this.has(key) && delete this.__data__[key];
          this.size -= result ? 1 : 0;
          return result;
        }

        /** Used to stand-in for `undefined` hash values. */
        var HASH_UNDEFINED$2 = '__lodash_hash_undefined__';

        /** Used for built-in method references. */
        var objectProto$4 = Object.prototype;

        /** Used to check objects for own properties. */
        var hasOwnProperty$3 = objectProto$4.hasOwnProperty;

        /**
         * Gets the hash value for `key`.
         *
         * @private
         * @name get
         * @memberOf Hash
         * @param {string} key The key of the value to get.
         * @returns {*} Returns the entry value.
         */
        function hashGet(key) {
          var data = this.__data__;
          if (nativeCreate$1) {
            var result = data[key];
            return result === HASH_UNDEFINED$2 ? undefined : result;
          }
          return hasOwnProperty$3.call(data, key) ? data[key] : undefined;
        }

        /** Used for built-in method references. */
        var objectProto$3 = Object.prototype;

        /** Used to check objects for own properties. */
        var hasOwnProperty$2 = objectProto$3.hasOwnProperty;

        /**
         * Checks if a hash value for `key` exists.
         *
         * @private
         * @name has
         * @memberOf Hash
         * @param {string} key The key of the entry to check.
         * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
         */
        function hashHas(key) {
          var data = this.__data__;
          return nativeCreate$1 ? data[key] !== undefined : hasOwnProperty$2.call(data, key);
        }

        /** Used to stand-in for `undefined` hash values. */
        var HASH_UNDEFINED$1 = '__lodash_hash_undefined__';

        /**
         * Sets the hash `key` to `value`.
         *
         * @private
         * @name set
         * @memberOf Hash
         * @param {string} key The key of the value to set.
         * @param {*} value The value to set.
         * @returns {Object} Returns the hash instance.
         */
        function hashSet(key, value) {
          var data = this.__data__;
          this.size += this.has(key) ? 0 : 1;
          data[key] = nativeCreate$1 && value === undefined ? HASH_UNDEFINED$1 : value;
          return this;
        }

        /**
         * Creates a hash object.
         *
         * @private
         * @constructor
         * @param {Array} [entries] The key-value pairs to cache.
         */
        function Hash(entries) {
          var index = -1,
            length = entries == null ? 0 : entries.length;
          this.clear();
          while (++index < length) {
            var entry = entries[index];
            this.set(entry[0], entry[1]);
          }
        }

        // Add methods to `Hash`.
        Hash.prototype.clear = hashClear;
        Hash.prototype['delete'] = hashDelete;
        Hash.prototype.get = hashGet;
        Hash.prototype.has = hashHas;
        Hash.prototype.set = hashSet;

        /**
         * Removes all key-value entries from the list cache.
         *
         * @private
         * @name clear
         * @memberOf ListCache
         */
        function listCacheClear() {
          this.__data__ = [];
          this.size = 0;
        }

        /**
         * Gets the index at which the `key` is found in `array` of key-value pairs.
         *
         * @private
         * @param {Array} array The array to inspect.
         * @param {*} key The key to search for.
         * @returns {number} Returns the index of the matched value, else `-1`.
         */
        function assocIndexOf(array, key) {
          var length = array.length;
          while (length--) {
            if (eq(array[length][0], key)) {
              return length;
            }
          }
          return -1;
        }

        /** Used for built-in method references. */
        var arrayProto = Array.prototype;

        /** Built-in value references. */
        var splice = arrayProto.splice;

        /**
         * Removes `key` and its value from the list cache.
         *
         * @private
         * @name delete
         * @memberOf ListCache
         * @param {string} key The key of the value to remove.
         * @returns {boolean} Returns `true` if the entry was removed, else `false`.
         */
        function listCacheDelete(key) {
          var data = this.__data__,
            index = assocIndexOf(data, key);
          if (index < 0) {
            return false;
          }
          var lastIndex = data.length - 1;
          if (index == lastIndex) {
            data.pop();
          } else {
            splice.call(data, index, 1);
          }
          --this.size;
          return true;
        }

        /**
         * Gets the list cache value for `key`.
         *
         * @private
         * @name get
         * @memberOf ListCache
         * @param {string} key The key of the value to get.
         * @returns {*} Returns the entry value.
         */
        function listCacheGet(key) {
          var data = this.__data__,
            index = assocIndexOf(data, key);
          return index < 0 ? undefined : data[index][1];
        }

        /**
         * Checks if a list cache value for `key` exists.
         *
         * @private
         * @name has
         * @memberOf ListCache
         * @param {string} key The key of the entry to check.
         * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
         */
        function listCacheHas(key) {
          return assocIndexOf(this.__data__, key) > -1;
        }

        /**
         * Sets the list cache `key` to `value`.
         *
         * @private
         * @name set
         * @memberOf ListCache
         * @param {string} key The key of the value to set.
         * @param {*} value The value to set.
         * @returns {Object} Returns the list cache instance.
         */
        function listCacheSet(key, value) {
          var data = this.__data__,
            index = assocIndexOf(data, key);
          if (index < 0) {
            ++this.size;
            data.push([key, value]);
          } else {
            data[index][1] = value;
          }
          return this;
        }

        /**
         * Creates an list cache object.
         *
         * @private
         * @constructor
         * @param {Array} [entries] The key-value pairs to cache.
         */
        function ListCache(entries) {
          var index = -1,
            length = entries == null ? 0 : entries.length;
          this.clear();
          while (++index < length) {
            var entry = entries[index];
            this.set(entry[0], entry[1]);
          }
        }

        // Add methods to `ListCache`.
        ListCache.prototype.clear = listCacheClear;
        ListCache.prototype['delete'] = listCacheDelete;
        ListCache.prototype.get = listCacheGet;
        ListCache.prototype.has = listCacheHas;
        ListCache.prototype.set = listCacheSet;

        /* Built-in method references that are verified to be native. */
        var Map = getNative(root$1, 'Map');
        var Map$1 = Map;

        /**
         * Removes all key-value entries from the map.
         *
         * @private
         * @name clear
         * @memberOf MapCache
         */
        function mapCacheClear() {
          this.size = 0;
          this.__data__ = {
            'hash': new Hash(),
            'map': new (Map$1 || ListCache)(),
            'string': new Hash()
          };
        }

        /**
         * Checks if `value` is suitable for use as unique object key.
         *
         * @private
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
         */
        function isKeyable(value) {
          var type = _typeof(value);
          return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;
        }

        /**
         * Gets the data for `map`.
         *
         * @private
         * @param {Object} map The map to query.
         * @param {string} key The reference key.
         * @returns {*} Returns the map data.
         */
        function getMapData(map, key) {
          var data = map.__data__;
          return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;
        }

        /**
         * Removes `key` and its value from the map.
         *
         * @private
         * @name delete
         * @memberOf MapCache
         * @param {string} key The key of the value to remove.
         * @returns {boolean} Returns `true` if the entry was removed, else `false`.
         */
        function mapCacheDelete(key) {
          var result = getMapData(this, key)['delete'](key);
          this.size -= result ? 1 : 0;
          return result;
        }

        /**
         * Gets the map value for `key`.
         *
         * @private
         * @name get
         * @memberOf MapCache
         * @param {string} key The key of the value to get.
         * @returns {*} Returns the entry value.
         */
        function mapCacheGet(key) {
          return getMapData(this, key).get(key);
        }

        /**
         * Checks if a map value for `key` exists.
         *
         * @private
         * @name has
         * @memberOf MapCache
         * @param {string} key The key of the entry to check.
         * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
         */
        function mapCacheHas(key) {
          return getMapData(this, key).has(key);
        }

        /**
         * Sets the map `key` to `value`.
         *
         * @private
         * @name set
         * @memberOf MapCache
         * @param {string} key The key of the value to set.
         * @param {*} value The value to set.
         * @returns {Object} Returns the map cache instance.
         */
        function mapCacheSet(key, value) {
          var data = getMapData(this, key),
            size = data.size;
          data.set(key, value);
          this.size += data.size == size ? 0 : 1;
          return this;
        }

        /**
         * Creates a map cache object to store key-value pairs.
         *
         * @private
         * @constructor
         * @param {Array} [entries] The key-value pairs to cache.
         */
        function MapCache(entries) {
          var index = -1,
            length = entries == null ? 0 : entries.length;
          this.clear();
          while (++index < length) {
            var entry = entries[index];
            this.set(entry[0], entry[1]);
          }
        }

        // Add methods to `MapCache`.
        MapCache.prototype.clear = mapCacheClear;
        MapCache.prototype['delete'] = mapCacheDelete;
        MapCache.prototype.get = mapCacheGet;
        MapCache.prototype.has = mapCacheHas;
        MapCache.prototype.set = mapCacheSet;

        /** Error message constants. */
        var FUNC_ERROR_TEXT$2 = 'Expected a function';

        /**
         * Creates a function that memoizes the result of `func`. If `resolver` is
         * provided, it determines the cache key for storing the result based on the
         * arguments provided to the memoized function. By default, the first argument
         * provided to the memoized function is used as the map cache key. The `func`
         * is invoked with the `this` binding of the memoized function.
         *
         * **Note:** The cache is exposed as the `cache` property on the memoized
         * function. Its creation may be customized by replacing the `_.memoize.Cache`
         * constructor with one whose instances implement the
         * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
         * method interface of `clear`, `delete`, `get`, `has`, and `set`.
         *
         * @static
         * @memberOf _
         * @since 0.1.0
         * @category Function
         * @param {Function} func The function to have its output memoized.
         * @param {Function} [resolver] The function to resolve the cache key.
         * @returns {Function} Returns the new memoized function.
         * @example
         *
         * var object = { 'a': 1, 'b': 2 };
         * var other = { 'c': 3, 'd': 4 };
         *
         * var values = _.memoize(_.values);
         * values(object);
         * // => [1, 2]
         *
         * values(other);
         * // => [3, 4]
         *
         * object.a = 2;
         * values(object);
         * // => [1, 2]
         *
         * // Modify the result cache.
         * values.cache.set(object, ['a', 'b']);
         * values(object);
         * // => ['a', 'b']
         *
         * // Replace `_.memoize.Cache`.
         * _.memoize.Cache = WeakMap;
         */
        function memoize(func, resolver) {
          if (typeof func != 'function' || resolver != null && typeof resolver != 'function') {
            throw new TypeError(FUNC_ERROR_TEXT$2);
          }
          var memoized = function memoized() {
            var args = arguments,
              key = resolver ? resolver.apply(this, args) : args[0],
              cache = memoized.cache;
            if (cache.has(key)) {
              return cache.get(key);
            }
            var result = func.apply(this, args);
            memoized.cache = cache.set(key, result) || cache;
            return result;
          };
          memoized.cache = new (memoize.Cache || MapCache)();
          return memoized;
        }

        // Expose `MapCache`.
        memoize.Cache = MapCache;

        /** Used as the maximum memoize cache size. */
        var MAX_MEMOIZE_SIZE = 500;

        /**
         * A specialized version of `_.memoize` which clears the memoized function's
         * cache when it exceeds `MAX_MEMOIZE_SIZE`.
         *
         * @private
         * @param {Function} func The function to have its output memoized.
         * @returns {Function} Returns the new memoized function.
         */
        function memoizeCapped(func) {
          var result = memoize(func, function (key) {
            if (cache.size === MAX_MEMOIZE_SIZE) {
              cache.clear();
            }
            return key;
          });
          var cache = result.cache;
          return result;
        }

        /** Used to match property names within property paths. */
        var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;

        /** Used to match backslashes in property paths. */
        var reEscapeChar = /\\(\\)?/g;

        /**
         * Converts `string` to a property path array.
         *
         * @private
         * @param {string} string The string to convert.
         * @returns {Array} Returns the property path array.
         */
        var stringToPath = memoizeCapped(function (string) {
          var result = [];
          if (string.charCodeAt(0) === 46 /* . */) {
            result.push('');
          }
          string.replace(rePropName, function (match, number, quote, subString) {
            result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match);
          });
          return result;
        });
        var stringToPath$1 = stringToPath;

        /**
         * Converts `value` to a string. An empty string is returned for `null`
         * and `undefined` values. The sign of `-0` is preserved.
         *
         * @static
         * @memberOf _
         * @since 4.0.0
         * @category Lang
         * @param {*} value The value to convert.
         * @returns {string} Returns the converted string.
         * @example
         *
         * _.toString(null);
         * // => ''
         *
         * _.toString(-0);
         * // => '-0'
         *
         * _.toString([1, 2, 3]);
         * // => '1,2,3'
         */
        function toString(value) {
          return value == null ? '' : baseToString(value);
        }

        /**
         * Casts `value` to a path array if it's not one.
         *
         * @private
         * @param {*} value The value to inspect.
         * @param {Object} [object] The object to query keys on.
         * @returns {Array} Returns the cast property path array.
         */
        function castPath(value, object) {
          if (isArray$1(value)) {
            return value;
          }
          return isKey(value, object) ? [value] : stringToPath$1(toString(value));
        }

        /** Used as references for various `Number` constants. */
        var INFINITY = 1 / 0;

        /**
         * Converts `value` to a string key if it's not a string or symbol.
         *
         * @private
         * @param {*} value The value to inspect.
         * @returns {string|symbol} Returns the key.
         */
        function toKey(value) {
          if (typeof value == 'string' || isSymbol(value)) {
            return value;
          }
          var result = value + '';
          return result == '0' && 1 / value == -INFINITY ? '-0' : result;
        }

        /**
         * The base implementation of `_.get` without support for default values.
         *
         * @private
         * @param {Object} object The object to query.
         * @param {Array|string} path The path of the property to get.
         * @returns {*} Returns the resolved value.
         */
        function baseGet(object, path) {
          path = castPath(path, object);
          var index = 0,
            length = path.length;
          while (object != null && index < length) {
            object = object[toKey(path[index++])];
          }
          return index && index == length ? object : undefined;
        }

        /**
         * Gets the value at `path` of `object`. If the resolved value is
         * `undefined`, the `defaultValue` is returned in its place.
         *
         * @static
         * @memberOf _
         * @since 3.7.0
         * @category Object
         * @param {Object} object The object to query.
         * @param {Array|string} path The path of the property to get.
         * @param {*} [defaultValue] The value returned for `undefined` resolved values.
         * @returns {*} Returns the resolved value.
         * @example
         *
         * var object = { 'a': [{ 'b': { 'c': 3 } }] };
         *
         * _.get(object, 'a[0].b.c');
         * // => 3
         *
         * _.get(object, ['a', '0', 'b', 'c']);
         * // => 3
         *
         * _.get(object, 'a.b.c', 'default');
         * // => 'default'
         */
        function get(object, path, defaultValue) {
          var result = object == null ? undefined : baseGet(object, path);
          return result === undefined ? defaultValue : result;
        }

        /**
         * Appends the elements of `values` to `array`.
         *
         * @private
         * @param {Array} array The array to modify.
         * @param {Array} values The values to append.
         * @returns {Array} Returns `array`.
         */
        function arrayPush(array, values) {
          var index = -1,
            length = values.length,
            offset = array.length;
          while (++index < length) {
            array[offset + index] = values[index];
          }
          return array;
        }

        /**
         * Removes all key-value entries from the stack.
         *
         * @private
         * @name clear
         * @memberOf Stack
         */
        function stackClear() {
          this.__data__ = new ListCache();
          this.size = 0;
        }

        /**
         * Removes `key` and its value from the stack.
         *
         * @private
         * @name delete
         * @memberOf Stack
         * @param {string} key The key of the value to remove.
         * @returns {boolean} Returns `true` if the entry was removed, else `false`.
         */
        function stackDelete(key) {
          var data = this.__data__,
            result = data['delete'](key);
          this.size = data.size;
          return result;
        }

        /**
         * Gets the stack value for `key`.
         *
         * @private
         * @name get
         * @memberOf Stack
         * @param {string} key The key of the value to get.
         * @returns {*} Returns the entry value.
         */
        function stackGet(key) {
          return this.__data__.get(key);
        }

        /**
         * Checks if a stack value for `key` exists.
         *
         * @private
         * @name has
         * @memberOf Stack
         * @param {string} key The key of the entry to check.
         * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
         */
        function stackHas(key) {
          return this.__data__.has(key);
        }

        /** Used as the size to enable large array optimizations. */
        var LARGE_ARRAY_SIZE = 200;

        /**
         * Sets the stack `key` to `value`.
         *
         * @private
         * @name set
         * @memberOf Stack
         * @param {string} key The key of the value to set.
         * @param {*} value The value to set.
         * @returns {Object} Returns the stack cache instance.
         */
        function stackSet(key, value) {
          var data = this.__data__;
          if (data instanceof ListCache) {
            var pairs = data.__data__;
            if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE - 1) {
              pairs.push([key, value]);
              this.size = ++data.size;
              return this;
            }
            data = this.__data__ = new MapCache(pairs);
          }
          data.set(key, value);
          this.size = data.size;
          return this;
        }

        /**
         * Creates a stack cache object to store key-value pairs.
         *
         * @private
         * @constructor
         * @param {Array} [entries] The key-value pairs to cache.
         */
        function Stack(entries) {
          var data = this.__data__ = new ListCache(entries);
          this.size = data.size;
        }

        // Add methods to `Stack`.
        Stack.prototype.clear = stackClear;
        Stack.prototype['delete'] = stackDelete;
        Stack.prototype.get = stackGet;
        Stack.prototype.has = stackHas;
        Stack.prototype.set = stackSet;

        /**
         * A specialized version of `_.filter` for arrays without support for
         * iteratee shorthands.
         *
         * @private
         * @param {Array} [array] The array to iterate over.
         * @param {Function} predicate The function invoked per iteration.
         * @returns {Array} Returns the new filtered array.
         */
        function arrayFilter(array, predicate) {
          var index = -1,
            length = array == null ? 0 : array.length,
            resIndex = 0,
            result = [];
          while (++index < length) {
            var value = array[index];
            if (predicate(value, index, array)) {
              result[resIndex++] = value;
            }
          }
          return result;
        }

        /**
         * This method returns a new empty array.
         *
         * @static
         * @memberOf _
         * @since 4.13.0
         * @category Util
         * @returns {Array} Returns the new empty array.
         * @example
         *
         * var arrays = _.times(2, _.stubArray);
         *
         * console.log(arrays);
         * // => [[], []]
         *
         * console.log(arrays[0] === arrays[1]);
         * // => false
         */
        function stubArray() {
          return [];
        }

        /** Used for built-in method references. */
        var objectProto$2 = Object.prototype;

        /** Built-in value references. */
        var propertyIsEnumerable = objectProto$2.propertyIsEnumerable;

        /* Built-in method references for those with the same name as other `lodash` methods. */
        var nativeGetSymbols = Object.getOwnPropertySymbols;

        /**
         * Creates an array of the own enumerable symbols of `object`.
         *
         * @private
         * @param {Object} object The object to query.
         * @returns {Array} Returns the array of symbols.
         */
        var getSymbols = !nativeGetSymbols ? stubArray : function (object) {
          if (object == null) {
            return [];
          }
          object = Object(object);
          return arrayFilter(nativeGetSymbols(object), function (symbol) {
            return propertyIsEnumerable.call(object, symbol);
          });
        };
        var getSymbols$1 = getSymbols;

        /**
         * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
         * `keysFunc` and `symbolsFunc` to get the enumerable property names and
         * symbols of `object`.
         *
         * @private
         * @param {Object} object The object to query.
         * @param {Function} keysFunc The function to get the keys of `object`.
         * @param {Function} symbolsFunc The function to get the symbols of `object`.
         * @returns {Array} Returns the array of property names and symbols.
         */
        function baseGetAllKeys(object, keysFunc, symbolsFunc) {
          var result = keysFunc(object);
          return isArray$1(object) ? result : arrayPush(result, symbolsFunc(object));
        }

        /**
         * Creates an array of own enumerable property names and symbols of `object`.
         *
         * @private
         * @param {Object} object The object to query.
         * @returns {Array} Returns the array of property names and symbols.
         */
        function getAllKeys(object) {
          return baseGetAllKeys(object, keys, getSymbols$1);
        }

        /* Built-in method references that are verified to be native. */
        var DataView = getNative(root$1, 'DataView');
        var DataView$1 = DataView;

        /* Built-in method references that are verified to be native. */
        var Promise$1 = getNative(root$1, 'Promise');
        var Promise$2 = Promise$1;

        /* Built-in method references that are verified to be native. */
        var Set = getNative(root$1, 'Set');
        var Set$1 = Set;

        /** `Object#toString` result references. */
        var mapTag$1 = '[object Map]',
          objectTag$1 = '[object Object]',
          promiseTag = '[object Promise]',
          setTag$1 = '[object Set]',
          weakMapTag = '[object WeakMap]';
        var dataViewTag$1 = '[object DataView]';

        /** Used to detect maps, sets, and weakmaps. */
        var dataViewCtorString = toSource(DataView$1),
          mapCtorString = toSource(Map$1),
          promiseCtorString = toSource(Promise$2),
          setCtorString = toSource(Set$1),
          weakMapCtorString = toSource(WeakMap$1);

        /**
         * Gets the `toStringTag` of `value`.
         *
         * @private
         * @param {*} value The value to query.
         * @returns {string} Returns the `toStringTag`.
         */
        var getTag = baseGetTag;

        // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
        if (DataView$1 && getTag(new DataView$1(new ArrayBuffer(1))) != dataViewTag$1 || Map$1 && getTag(new Map$1()) != mapTag$1 || Promise$2 && getTag(Promise$2.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$1 || WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag) {
          getTag = function getTag(value) {
            var result = baseGetTag(value),
              Ctor = result == objectTag$1 ? value.constructor : undefined,
              ctorString = Ctor ? toSource(Ctor) : '';
            if (ctorString) {
              switch (ctorString) {
                case dataViewCtorString:
                  return dataViewTag$1;
                case mapCtorString:
                  return mapTag$1;
                case promiseCtorString:
                  return promiseTag;
                case setCtorString:
                  return setTag$1;
                case weakMapCtorString:
                  return weakMapTag;
              }
            }
            return result;
          };
        }
        var getTag$1 = getTag;

        /** Built-in value references. */
        var Uint8Array = root$1.Uint8Array;
        var Uint8Array$1 = Uint8Array;

        /** Used to stand-in for `undefined` hash values. */
        var HASH_UNDEFINED = '__lodash_hash_undefined__';

        /**
         * Adds `value` to the array cache.
         *
         * @private
         * @name add
         * @memberOf SetCache
         * @alias push
         * @param {*} value The value to cache.
         * @returns {Object} Returns the cache instance.
         */
        function setCacheAdd(value) {
          this.__data__.set(value, HASH_UNDEFINED);
          return this;
        }

        /**
         * Checks if `value` is in the array cache.
         *
         * @private
         * @name has
         * @memberOf SetCache
         * @param {*} value The value to search for.
         * @returns {number} Returns `true` if `value` is found, else `false`.
         */
        function setCacheHas(value) {
          return this.__data__.has(value);
        }

        /**
         *
         * Creates an array cache object to store unique values.
         *
         * @private
         * @constructor
         * @param {Array} [values] The values to cache.
         */
        function SetCache(values) {
          var index = -1,
            length = values == null ? 0 : values.length;
          this.__data__ = new MapCache();
          while (++index < length) {
            this.add(values[index]);
          }
        }

        // Add methods to `SetCache`.
        SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
        SetCache.prototype.has = setCacheHas;

        /**
         * A specialized version of `_.some` for arrays without support for iteratee
         * shorthands.
         *
         * @private
         * @param {Array} [array] The array to iterate over.
         * @param {Function} predicate The function invoked per iteration.
         * @returns {boolean} Returns `true` if any element passes the predicate check,
         *  else `false`.
         */
        function arraySome(array, predicate) {
          var index = -1,
            length = array == null ? 0 : array.length;
          while (++index < length) {
            if (predicate(array[index], index, array)) {
              return true;
            }
          }
          return false;
        }

        /**
         * Checks if a `cache` value for `key` exists.
         *
         * @private
         * @param {Object} cache The cache to query.
         * @param {string} key The key of the entry to check.
         * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
         */
        function cacheHas(cache, key) {
          return cache.has(key);
        }

        /** Used to compose bitmasks for value comparisons. */
        var COMPARE_PARTIAL_FLAG$5 = 1,
          COMPARE_UNORDERED_FLAG$3 = 2;

        /**
         * A specialized version of `baseIsEqualDeep` for arrays with support for
         * partial deep comparisons.
         *
         * @private
         * @param {Array} array The array to compare.
         * @param {Array} other The other array to compare.
         * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
         * @param {Function} customizer The function to customize comparisons.
         * @param {Function} equalFunc The function to determine equivalents of values.
         * @param {Object} stack Tracks traversed `array` and `other` objects.
         * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
         */
        function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
          var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5,
            arrLength = array.length,
            othLength = other.length;
          if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
            return false;
          }
          // Check that cyclic values are equal.
          var arrStacked = stack.get(array);
          var othStacked = stack.get(other);
          if (arrStacked && othStacked) {
            return arrStacked == other && othStacked == array;
          }
          var index = -1,
            result = true,
            seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : undefined;
          stack.set(array, other);
          stack.set(other, array);

          // Ignore non-index properties.
          while (++index < arrLength) {
            var arrValue = array[index],
              othValue = other[index];
            if (customizer) {
              var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);
            }
            if (compared !== undefined) {
              if (compared) {
                continue;
              }
              result = false;
              break;
            }
            // Recursively compare arrays (susceptible to call stack limits).
            if (seen) {
              if (!arraySome(other, function (othValue, othIndex) {
                if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
                  return seen.push(othIndex);
                }
              })) {
                result = false;
                break;
              }
            } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
              result = false;
              break;
            }
          }
          stack['delete'](array);
          stack['delete'](other);
          return result;
        }

        /**
         * Converts `map` to its key-value pairs.
         *
         * @private
         * @param {Object} map The map to convert.
         * @returns {Array} Returns the key-value pairs.
         */
        function mapToArray(map) {
          var index = -1,
            result = Array(map.size);
          map.forEach(function (value, key) {
            result[++index] = [key, value];
          });
          return result;
        }

        /**
         * Converts `set` to an array of its values.
         *
         * @private
         * @param {Object} set The set to convert.
         * @returns {Array} Returns the values.
         */
        function setToArray(set) {
          var index = -1,
            result = Array(set.size);
          set.forEach(function (value) {
            result[++index] = value;
          });
          return result;
        }

        /** Used to compose bitmasks for value comparisons. */
        var COMPARE_PARTIAL_FLAG$4 = 1,
          COMPARE_UNORDERED_FLAG$2 = 2;

        /** `Object#toString` result references. */
        var boolTag = '[object Boolean]',
          dateTag = '[object Date]',
          errorTag = '[object Error]',
          mapTag = '[object Map]',
          numberTag = '[object Number]',
          regexpTag = '[object RegExp]',
          setTag = '[object Set]',
          stringTag = '[object String]',
          symbolTag = '[object Symbol]';
        var arrayBufferTag = '[object ArrayBuffer]',
          dataViewTag = '[object DataView]';

        /** Used to convert symbols to primitives and strings. */
        var symbolProto = Symbol$2 ? Symbol$2.prototype : undefined,
          symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;

        /**
         * A specialized version of `baseIsEqualDeep` for comparing objects of
         * the same `toStringTag`.
         *
         * **Note:** This function only supports comparing values with tags of
         * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
         *
         * @private
         * @param {Object} object The object to compare.
         * @param {Object} other The other object to compare.
         * @param {string} tag The `toStringTag` of the objects to compare.
         * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
         * @param {Function} customizer The function to customize comparisons.
         * @param {Function} equalFunc The function to determine equivalents of values.
         * @param {Object} stack Tracks traversed `object` and `other` objects.
         * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
         */
        function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
          switch (tag) {
            case dataViewTag:
              if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
                return false;
              }
              object = object.buffer;
              other = other.buffer;
            case arrayBufferTag:
              if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object), new Uint8Array$1(other))) {
                return false;
              }
              return true;
            case boolTag:
            case dateTag:
            case numberTag:
              // Coerce booleans to `1` or `0` and dates to milliseconds.
              // Invalid dates are coerced to `NaN`.
              return eq(+object, +other);
            case errorTag:
              return object.name == other.name && object.message == other.message;
            case regexpTag:
            case stringTag:
              // Coerce regexes to strings and treat strings, primitives and objects,
              // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
              // for more details.
              return object == other + '';
            case mapTag:
              var convert = mapToArray;
            case setTag:
              var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4;
              convert || (convert = setToArray);
              if (object.size != other.size && !isPartial) {
                return false;
              }
              // Assume cyclic values are equal.
              var stacked = stack.get(object);
              if (stacked) {
                return stacked == other;
              }
              bitmask |= COMPARE_UNORDERED_FLAG$2;

              // Recursively compare objects (susceptible to call stack limits).
              stack.set(object, other);
              var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
              stack['delete'](object);
              return result;
            case symbolTag:
              if (symbolValueOf) {
                return symbolValueOf.call(object) == symbolValueOf.call(other);
              }
          }
          return false;
        }

        /** Used to compose bitmasks for value comparisons. */
        var COMPARE_PARTIAL_FLAG$3 = 1;

        /** Used for built-in method references. */
        var objectProto$1 = Object.prototype;

        /** Used to check objects for own properties. */
        var hasOwnProperty$1 = objectProto$1.hasOwnProperty;

        /**
         * A specialized version of `baseIsEqualDeep` for objects with support for
         * partial deep comparisons.
         *
         * @private
         * @param {Object} object The object to compare.
         * @param {Object} other The other object to compare.
         * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
         * @param {Function} customizer The function to customize comparisons.
         * @param {Function} equalFunc The function to determine equivalents of values.
         * @param {Object} stack Tracks traversed `object` and `other` objects.
         * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
         */
        function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
          var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3,
            objProps = getAllKeys(object),
            objLength = objProps.length,
            othProps = getAllKeys(other),
            othLength = othProps.length;
          if (objLength != othLength && !isPartial) {
            return false;
          }
          var index = objLength;
          while (index--) {
            var key = objProps[index];
            if (!(isPartial ? key in other : hasOwnProperty$1.call(other, key))) {
              return false;
            }
          }
          // Check that cyclic values are equal.
          var objStacked = stack.get(object);
          var othStacked = stack.get(other);
          if (objStacked && othStacked) {
            return objStacked == other && othStacked == object;
          }
          var result = true;
          stack.set(object, other);
          stack.set(other, object);
          var skipCtor = isPartial;
          while (++index < objLength) {
            key = objProps[index];
            var objValue = object[key],
              othValue = other[key];
            if (customizer) {
              var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
            }
            // Recursively compare objects (susceptible to call stack limits).
            if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
              result = false;
              break;
            }
            skipCtor || (skipCtor = key == 'constructor');
          }
          if (result && !skipCtor) {
            var objCtor = object.constructor,
              othCtor = other.constructor;

            // Non `Object` object instances with different constructors are not equal.
            if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {
              result = false;
            }
          }
          stack['delete'](object);
          stack['delete'](other);
          return result;
        }

        /** Used to compose bitmasks for value comparisons. */
        var COMPARE_PARTIAL_FLAG$2 = 1;

        /** `Object#toString` result references. */
        var argsTag = '[object Arguments]',
          arrayTag = '[object Array]',
          objectTag = '[object Object]';

        /** Used for built-in method references. */
        var objectProto = Object.prototype;

        /** Used to check objects for own properties. */
        var hasOwnProperty = objectProto.hasOwnProperty;

        /**
         * A specialized version of `baseIsEqual` for arrays and objects which performs
         * deep comparisons and tracks traversed objects enabling objects with circular
         * references to be compared.
         *
         * @private
         * @param {Object} object The object to compare.
         * @param {Object} other The other object to compare.
         * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
         * @param {Function} customizer The function to customize comparisons.
         * @param {Function} equalFunc The function to determine equivalents of values.
         * @param {Object} [stack] Tracks traversed `object` and `other` objects.
         * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
         */
        function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
          var objIsArr = isArray$1(object),
            othIsArr = isArray$1(other),
            objTag = objIsArr ? arrayTag : getTag$1(object),
            othTag = othIsArr ? arrayTag : getTag$1(other);
          objTag = objTag == argsTag ? objectTag : objTag;
          othTag = othTag == argsTag ? objectTag : othTag;
          var objIsObj = objTag == objectTag,
            othIsObj = othTag == objectTag,
            isSameTag = objTag == othTag;
          if (isSameTag && isBuffer$1(object)) {
            if (!isBuffer$1(other)) {
              return false;
            }
            objIsArr = true;
            objIsObj = false;
          }
          if (isSameTag && !objIsObj) {
            stack || (stack = new Stack());
            return objIsArr || isTypedArray$1(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
          }
          if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) {
            var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
              othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
            if (objIsWrapped || othIsWrapped) {
              var objUnwrapped = objIsWrapped ? object.value() : object,
                othUnwrapped = othIsWrapped ? other.value() : other;
              stack || (stack = new Stack());
              return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
            }
          }
          if (!isSameTag) {
            return false;
          }
          stack || (stack = new Stack());
          return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
        }

        /**
         * The base implementation of `_.isEqual` which supports partial comparisons
         * and tracks traversed objects.
         *
         * @private
         * @param {*} value The value to compare.
         * @param {*} other The other value to compare.
         * @param {boolean} bitmask The bitmask flags.
         *  1 - Unordered comparison
         *  2 - Partial comparison
         * @param {Function} [customizer] The function to customize comparisons.
         * @param {Object} [stack] Tracks traversed `value` and `other` objects.
         * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
         */
        function baseIsEqual(value, other, bitmask, customizer, stack) {
          if (value === other) {
            return true;
          }
          if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {
            return value !== value && other !== other;
          }
          return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
        }

        /** Used to compose bitmasks for value comparisons. */
        var COMPARE_PARTIAL_FLAG$1 = 1,
          COMPARE_UNORDERED_FLAG$1 = 2;

        /**
         * The base implementation of `_.isMatch` without support for iteratee shorthands.
         *
         * @private
         * @param {Object} object The object to inspect.
         * @param {Object} source The object of property values to match.
         * @param {Array} matchData The property names, values, and compare flags to match.
         * @param {Function} [customizer] The function to customize comparisons.
         * @returns {boolean} Returns `true` if `object` is a match, else `false`.
         */
        function baseIsMatch(object, source, matchData, customizer) {
          var index = matchData.length,
            length = index,
            noCustomizer = !customizer;
          if (object == null) {
            return !length;
          }
          object = Object(object);
          while (index--) {
            var data = matchData[index];
            if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {
              return false;
            }
          }
          while (++index < length) {
            data = matchData[index];
            var key = data[0],
              objValue = object[key],
              srcValue = data[1];
            if (noCustomizer && data[2]) {
              if (objValue === undefined && !(key in object)) {
                return false;
              }
            } else {
              var stack = new Stack();
              if (customizer) {
                var result = customizer(objValue, srcValue, key, object, source, stack);
              }
              if (!(result === undefined ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result)) {
                return false;
              }
            }
          }
          return true;
        }

        /**
         * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
         *
         * @private
         * @param {*} value The value to check.
         * @returns {boolean} Returns `true` if `value` if suitable for strict
         *  equality comparisons, else `false`.
         */
        function isStrictComparable(value) {
          return value === value && !isObject(value);
        }

        /**
         * Gets the property names, values, and compare flags of `object`.
         *
         * @private
         * @param {Object} object The object to query.
         * @returns {Array} Returns the match data of `object`.
         */
        function getMatchData(object) {
          var result = keys(object),
            length = result.length;
          while (length--) {
            var key = result[length],
              value = object[key];
            result[length] = [key, value, isStrictComparable(value)];
          }
          return result;
        }

        /**
         * A specialized version of `matchesProperty` for source values suitable
         * for strict equality comparisons, i.e. `===`.
         *
         * @private
         * @param {string} key The key of the property to get.
         * @param {*} srcValue The value to match.
         * @returns {Function} Returns the new spec function.
         */
        function matchesStrictComparable(key, srcValue) {
          return function (object) {
            if (object == null) {
              return false;
            }
            return object[key] === srcValue && (srcValue !== undefined || key in Object(object));
          };
        }

        /**
         * The base implementation of `_.matches` which doesn't clone `source`.
         *
         * @private
         * @param {Object} source The object of property values to match.
         * @returns {Function} Returns the new spec function.
         */
        function baseMatches(source) {
          var matchData = getMatchData(source);
          if (matchData.length == 1 && matchData[0][2]) {
            return matchesStrictComparable(matchData[0][0], matchData[0][1]);
          }
          return function (object) {
            return object === source || baseIsMatch(object, source, matchData);
          };
        }

        /**
         * The base implementation of `_.hasIn` without support for deep paths.
         *
         * @private
         * @param {Object} [object] The object to query.
         * @param {Array|string} key The key to check.
         * @returns {boolean} Returns `true` if `key` exists, else `false`.
         */
        function baseHasIn(object, key) {
          return object != null && key in Object(object);
        }

        /**
         * Checks if `path` exists on `object`.
         *
         * @private
         * @param {Object} object The object to query.
         * @param {Array|string} path The path to check.
         * @param {Function} hasFunc The function to check properties.
         * @returns {boolean} Returns `true` if `path` exists, else `false`.
         */
        function hasPath(object, path, hasFunc) {
          path = castPath(path, object);
          var index = -1,
            length = path.length,
            result = false;
          while (++index < length) {
            var key = toKey(path[index]);
            if (!(result = object != null && hasFunc(object, key))) {
              break;
            }
            object = object[key];
          }
          if (result || ++index != length) {
            return result;
          }
          length = object == null ? 0 : object.length;
          return !!length && isLength(length) && isIndex(key, length) && (isArray$1(object) || isArguments$1(object));
        }

        /**
         * Checks if `path` is a direct or inherited property of `object`.
         *
         * @static
         * @memberOf _
         * @since 4.0.0
         * @category Object
         * @param {Object} object The object to query.
         * @param {Array|string} path The path to check.
         * @returns {boolean} Returns `true` if `path` exists, else `false`.
         * @example
         *
         * var object = _.create({ 'a': _.create({ 'b': 2 }) });
         *
         * _.hasIn(object, 'a');
         * // => true
         *
         * _.hasIn(object, 'a.b');
         * // => true
         *
         * _.hasIn(object, ['a', 'b']);
         * // => true
         *
         * _.hasIn(object, 'b');
         * // => false
         */
        function hasIn(object, path) {
          return object != null && hasPath(object, path, baseHasIn);
        }

        /** Used to compose bitmasks for value comparisons. */
        var COMPARE_PARTIAL_FLAG = 1,
          COMPARE_UNORDERED_FLAG = 2;

        /**
         * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
         *
         * @private
         * @param {string} path The path of the property to get.
         * @param {*} srcValue The value to match.
         * @returns {Function} Returns the new spec function.
         */
        function baseMatchesProperty(path, srcValue) {
          if (isKey(path) && isStrictComparable(srcValue)) {
            return matchesStrictComparable(toKey(path), srcValue);
          }
          return function (object) {
            var objValue = get(object, path);
            return objValue === undefined && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
          };
        }

        /**
         * The base implementation of `_.property` without support for deep paths.
         *
         * @private
         * @param {string} key The key of the property to get.
         * @returns {Function} Returns the new accessor function.
         */
        function baseProperty(key) {
          return function (object) {
            return object == null ? undefined : object[key];
          };
        }

        /**
         * A specialized version of `baseProperty` which supports deep paths.
         *
         * @private
         * @param {Array|string} path The path of the property to get.
         * @returns {Function} Returns the new accessor function.
         */
        function basePropertyDeep(path) {
          return function (object) {
            return baseGet(object, path);
          };
        }

        /**
         * Creates a function that returns the value at `path` of a given object.
         *
         * @static
         * @memberOf _
         * @since 2.4.0
         * @category Util
         * @param {Array|string} path The path of the property to get.
         * @returns {Function} Returns the new accessor function.
         * @example
         *
         * var objects = [
         *   { 'a': { 'b': 2 } },
         *   { 'a': { 'b': 1 } }
         * ];
         *
         * _.map(objects, _.property('a.b'));
         * // => [2, 1]
         *
         * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
         * // => [1, 2]
         */
        function property(path) {
          return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
        }

        /**
         * The base implementation of `_.iteratee`.
         *
         * @private
         * @param {*} [value=_.identity] The value to convert to an iteratee.
         * @returns {Function} Returns the iteratee.
         */
        function baseIteratee(value) {
          // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
          // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
          if (typeof value == 'function') {
            return value;
          }
          if (value == null) {
            return identity;
          }
          if (_typeof(value) == 'object') {
            return isArray$1(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);
          }
          return property(value);
        }

        /**
         * Gets the timestamp of the number of milliseconds that have elapsed since
         * the Unix epoch (1 January 1970 00:00:00 UTC).
         *
         * @static
         * @memberOf _
         * @since 2.4.0
         * @category Date
         * @returns {number} Returns the timestamp.
         * @example
         *
         * _.defer(function(stamp) {
         *   console.log(_.now() - stamp);
         * }, _.now());
         * // => Logs the number of milliseconds it took for the deferred invocation.
         */
        var now = function now() {
          return root$1.Date.now();
        };
        var now$1 = now;

        /** Error message constants. */
        var FUNC_ERROR_TEXT$1 = 'Expected a function';

        /* Built-in method references for those with the same name as other `lodash` methods. */
        var nativeMax$1 = Math.max,
          nativeMin$1 = Math.min;

        /**
         * Creates a debounced function that delays invoking `func` until after `wait`
         * milliseconds have elapsed since the last time the debounced function was
         * invoked. The debounced function comes with a `cancel` method to cancel
         * delayed `func` invocations and a `flush` method to immediately invoke them.
         * Provide `options` to indicate whether `func` should be invoked on the
         * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
         * with the last arguments provided to the debounced function. Subsequent
         * calls to the debounced function return the result of the last `func`
         * invocation.
         *
         * **Note:** If `leading` and `trailing` options are `true`, `func` is
         * invoked on the trailing edge of the timeout only if the debounced function
         * is invoked more than once during the `wait` timeout.
         *
         * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
         * until to the next tick, similar to `setTimeout` with a timeout of `0`.
         *
         * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
         * for details over the differences between `_.debounce` and `_.throttle`.
         *
         * @static
         * @memberOf _
         * @since 0.1.0
         * @category Function
         * @param {Function} func The function to debounce.
         * @param {number} [wait=0] The number of milliseconds to delay.
         * @param {Object} [options={}] The options object.
         * @param {boolean} [options.leading=false]
         *  Specify invoking on the leading edge of the timeout.
         * @param {number} [options.maxWait]
         *  The maximum time `func` is allowed to be delayed before it's invoked.
         * @param {boolean} [options.trailing=true]
         *  Specify invoking on the trailing edge of the timeout.
         * @returns {Function} Returns the new debounced function.
         * @example
         *
         * // Avoid costly calculations while the window size is in flux.
         * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
         *
         * // Invoke `sendMail` when clicked, debouncing subsequent calls.
         * jQuery(element).on('click', _.debounce(sendMail, 300, {
         *   'leading': true,
         *   'trailing': false
         * }));
         *
         * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
         * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
         * var source = new EventSource('/stream');
         * jQuery(source).on('message', debounced);
         *
         * // Cancel the trailing debounced invocation.
         * jQuery(window).on('popstate', debounced.cancel);
         */
        function debounce(func, wait, options) {
          var lastArgs,
            lastThis,
            maxWait,
            result,
            timerId,
            lastCallTime,
            lastInvokeTime = 0,
            leading = false,
            maxing = false,
            trailing = true;
          if (typeof func != 'function') {
            throw new TypeError(FUNC_ERROR_TEXT$1);
          }
          wait = toNumber(wait) || 0;
          if (isObject(options)) {
            leading = !!options.leading;
            maxing = 'maxWait' in options;
            maxWait = maxing ? nativeMax$1(toNumber(options.maxWait) || 0, wait) : maxWait;
            trailing = 'trailing' in options ? !!options.trailing : trailing;
          }
          function invokeFunc(time) {
            var args = lastArgs,
              thisArg = lastThis;
            lastArgs = lastThis = undefined;
            lastInvokeTime = time;
            result = func.apply(thisArg, args);
            return result;
          }
          function leadingEdge(time) {
            // Reset any `maxWait` timer.
            lastInvokeTime = time;
            // Start the timer for the trailing edge.
            timerId = setTimeout(timerExpired, wait);
            // Invoke the leading edge.
            return leading ? invokeFunc(time) : result;
          }
          function remainingWait(time) {
            var timeSinceLastCall = time - lastCallTime,
              timeSinceLastInvoke = time - lastInvokeTime,
              timeWaiting = wait - timeSinceLastCall;
            return maxing ? nativeMin$1(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
          }
          function shouldInvoke(time) {
            var timeSinceLastCall = time - lastCallTime,
              timeSinceLastInvoke = time - lastInvokeTime;

            // Either this is the first call, activity has stopped and we're at the
            // trailing edge, the system time has gone backwards and we're treating
            // it as the trailing edge, or we've hit the `maxWait` limit.
            return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
          }
          function timerExpired() {
            var time = now$1();
            if (shouldInvoke(time)) {
              return trailingEdge(time);
            }
            // Restart the timer.
            timerId = setTimeout(timerExpired, remainingWait(time));
          }
          function trailingEdge(time) {
            timerId = undefined;

            // Only invoke if we have `lastArgs` which means `func` has been
            // debounced at least once.
            if (trailing && lastArgs) {
              return invokeFunc(time);
            }
            lastArgs = lastThis = undefined;
            return result;
          }
          function cancel() {
            if (timerId !== undefined) {
              clearTimeout(timerId);
            }
            lastInvokeTime = 0;
            lastArgs = lastCallTime = lastThis = timerId = undefined;
          }
          function flush() {
            return timerId === undefined ? result : trailingEdge(now$1());
          }
          function debounced() {
            var time = now$1(),
              isInvoking = shouldInvoke(time);
            lastArgs = arguments;
            lastThis = this;
            lastCallTime = time;
            if (isInvoking) {
              if (timerId === undefined) {
                return leadingEdge(lastCallTime);
              }
              if (maxing) {
                // Handle invocations in a tight loop.
                clearTimeout(timerId);
                timerId = setTimeout(timerExpired, wait);
                return invokeFunc(lastCallTime);
              }
            }
            if (timerId === undefined) {
              timerId = setTimeout(timerExpired, wait);
            }
            return result;
          }
          debounced.cancel = cancel;
          debounced.flush = flush;
          return debounced;
        }

        /* Built-in method references for those with the same name as other `lodash` methods. */
        var nativeMax = Math.max,
          nativeMin = Math.min;

        /**
         * This method is like `_.findIndex` except that it iterates over elements
         * of `collection` from right to left.
         *
         * @static
         * @memberOf _
         * @since 2.0.0
         * @category Array
         * @param {Array} array The array to inspect.
         * @param {Function} [predicate=_.identity] The function invoked per iteration.
         * @param {number} [fromIndex=array.length-1] The index to search from.
         * @returns {number} Returns the index of the found element, else `-1`.
         * @example
         *
         * var users = [
         *   { 'user': 'barney',  'active': true },
         *   { 'user': 'fred',    'active': false },
         *   { 'user': 'pebbles', 'active': false }
         * ];
         *
         * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
         * // => 2
         *
         * // The `_.matches` iteratee shorthand.
         * _.findLastIndex(users, { 'user': 'barney', 'active': true });
         * // => 0
         *
         * // The `_.matchesProperty` iteratee shorthand.
         * _.findLastIndex(users, ['active', false]);
         * // => 2
         *
         * // The `_.property` iteratee shorthand.
         * _.findLastIndex(users, 'active');
         * // => 0
         */
        function findLastIndex(array, predicate, fromIndex) {
          var length = array == null ? 0 : array.length;
          if (!length) {
            return -1;
          }
          var index = length - 1;
          if (fromIndex !== undefined) {
            index = toInteger(fromIndex);
            index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
          }
          return baseFindIndex(array, baseIteratee(predicate), index, true);
        }

        /** Error message constants. */
        var FUNC_ERROR_TEXT = 'Expected a function';

        /**
         * Creates a throttled function that only invokes `func` at most once per
         * every `wait` milliseconds. The throttled function comes with a `cancel`
         * method to cancel delayed `func` invocations and a `flush` method to
         * immediately invoke them. Provide `options` to indicate whether `func`
         * should be invoked on the leading and/or trailing edge of the `wait`
         * timeout. The `func` is invoked with the last arguments provided to the
         * throttled function. Subsequent calls to the throttled function return the
         * result of the last `func` invocation.
         *
         * **Note:** If `leading` and `trailing` options are `true`, `func` is
         * invoked on the trailing edge of the timeout only if the throttled function
         * is invoked more than once during the `wait` timeout.
         *
         * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
         * until to the next tick, similar to `setTimeout` with a timeout of `0`.
         *
         * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
         * for details over the differences between `_.throttle` and `_.debounce`.
         *
         * @static
         * @memberOf _
         * @since 0.1.0
         * @category Function
         * @param {Function} func The function to throttle.
         * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
         * @param {Object} [options={}] The options object.
         * @param {boolean} [options.leading=true]
         *  Specify invoking on the leading edge of the timeout.
         * @param {boolean} [options.trailing=true]
         *  Specify invoking on the trailing edge of the timeout.
         * @returns {Function} Returns the new throttled function.
         * @example
         *
         * // Avoid excessively updating the position while scrolling.
         * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
         *
         * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
         * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
         * jQuery(element).on('click', throttled);
         *
         * // Cancel the trailing throttled invocation.
         * jQuery(window).on('popstate', throttled.cancel);
         */
        function throttle(func, wait, options) {
          var leading = true,
            trailing = true;
          if (typeof func != 'function') {
            throw new TypeError(FUNC_ERROR_TEXT);
          }
          if (isObject(options)) {
            leading = 'leading' in options ? !!options.leading : leading;
            trailing = 'trailing' in options ? !!options.trailing : trailing;
          }
          return debounce(func, wait, {
            'leading': leading,
            'maxWait': wait,
            'trailing': trailing
          });
        }
        function isAndroid() {
          return /(Android)/i.test(navigator.userAgent);
        }
        function isApple() {
          return /(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent);
        }
        function isSony() {
          return /sonyapp/i.test(navigator.userAgent);
        }
        function isSonyAppwk() {
          return /sonyapp_wkwebview/i.test(navigator.userAgent);
        }
        function isSonyApp() {
          return isSony() || isSonyAppwk();
        }
        function isMiniprogram() {
          return window.__wxjs_environment === 'miniprogram';
        }
        function miniprogramNavigateTo(url) {
          if (!isMiniprogram()) return;
          // 链接为固定值，eightd根据不同产品取不同8d
          window.wx.miniProgram.navigateTo({
            url: url
          });
        }
        function isMobile() {
          return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
        }

        /**
         * @description 手动上传埋点事件。如点击按钮时触发
         * @param tagType tag类型。示例：button按钮值为Button_click,input按钮值为Input_click，img按钮值为 Img_click，其他可点击按钮值为 html标签名+click
         * @param data 上传的埋点对象
         */
        function sendTagManually(tagType, data) {
          //定义tag数据
          var _dtm_tag_obj = _objectSpread({
            tagType: tagType
          }, data);

          //传输tag数据，需要在执行页面跳转前，触发如下代码
          window._dacq && typeof window._dacq.tag_obj_fun == 'function' && window._dacq.tag_obj_fun(_dtm_tag_obj);
        }

        // 如果App进入-交互
        function connectWebViewJavascriptBridge(callback) {
          if (window.WebViewJavascriptBridge) {
            callback(window.WebViewJavascriptBridge);
          } else {
            document.addEventListener('WebViewJavascriptBridgeReady', function () {
              callback(window.WebViewJavascriptBridge);
            }, false);
          }
        }
        /**
         * @param url - 跳转链接
         * @param title - 标题
         * @param linktype - App 跳转类型。如：1 / 4
         */
        function doAppAction(_ref) {
          var url = _ref.url,
            title = _ref.title,
            linktype = _ref.linktype;
          // 基本跳转类型
          var ed = {
            link: url,
            title: title,
            linktype: linktype
          };
          try {
            if (isApple()) {
              if (isSonyAppwk()) {
                window.webkit.messageHandlers.showName.postMessage(ed);
              } else if (isSony()) {
                connectWebViewJavascriptBridge(function (bridge) {
                  bridge.send(JSON.stringify(ed), function (response) {
                    console.log(response);
                  });
                });
              }
            }
            if (isAndroid() && ed.linktype) {
              window.SysClientJs.linktype(ed.linktype, JSON.stringify(ed));
            }
          } catch (err) {
            console.log('do app linktype', err);
          }
        }
        var __$_require_bc4ca446__ = "" + new URL('jitianwusi.jpg', module.meta.url).href + "";
        var promoter2 = "" + new URL('yingbaoli.jpg', module.meta.url).href + "";
        var promoter3 = "" + new URL('zhuzhong.jpg', module.meta.url).href + "";
        var promoter4 = "" + new URL('buchuan.jpg', module.meta.url).href + "";
        var promoter5 = "" + new URL('liuyinghuan.jpg', module.meta.url).href + "";
        var promoter6 = "" + new URL('zhengqi.png', module.meta.url).href + "";
        var promoter7 = "" + new URL('chuankou.jpg', module.meta.url).href + "";
        var promoter8 = "" + new URL('yiteng.jpg', module.meta.url).href + "";
        var empty = "" + new URL('null.jpg', module.meta.url).href + "";
        var topic1 = "" + new URL('bigscreen.jpg', module.meta.url).href + "";
        var topic2 = "" + new URL('topic-erji.jpg', module.meta.url).href + "";
        var topic3 = "" + new URL('one sony.jpg', module.meta.url).href + "";
        var price2 = "" + new URL('yinjiang-erji.jpg', module.meta.url).href + "";
        var price3 = "" + new URL('shoubing.jpg', module.meta.url).href + "";
        var __$_require_382dfdfc__ = "" + new URL('pingwei-erji.jpg', module.meta.url).href + "";
        var __$_require_337b4c9e__ = "" + new URL('logo-border.jpg', module.meta.url).href + "";
        var __$_require_411b12ae__ = "" + new URL('jiaoyu.jpg', module.meta.url).href + "";
        var __$_require_a44abdb2__ = "" + new URL('music.jpg', module.meta.url).href + "";
        var __$_require_6e67d7b4__ = "" + new URL('erji.jpg', module.meta.url).href + "";
        var __$_require_08c9c4f2__ = "" + new URL('KV.jpg', module.meta.url).href + "";
        var __$_require_45a1f8b8__ = "";
        var __$_require_45ce1a91__ = "";
        var __$_require_718bc11e__ = "";
        var __$_require_0e59efc4__ = "";
        var __$_require_d5d0a21c__ = "";
        var __$_require_3def530c__ = "" + new URL('shexiangji.jpg', module.meta.url).href + "";
        var __$_require_0a91f887__ = "" + new URL('logo.jpg', module.meta.url).href + "";
        var __$_require_23200d24__ = "" + new URL('orange.jpg', module.meta.url).href + "";
        var __$_require_1c9844bc__ = "" + new URL('pingshen.jpg', module.meta.url).href + "";
        var __$_require_7d9f27f4__ = "" + new URL('contact-music.jpg', module.meta.url).href + "";
        var App_vue_vue_type_style_index_0_scoped_277fcd07_lang = '';
        var App_vue_vue_type_style_index_1_lang = '';
        function normalizeComponent(scriptExports, render, staticRenderFns, functionalTemplate, injectStyles, scopeId, moduleIdentifier, /* server only */
        shadowMode /* vue-cli only */) {
          // Vue.extend constructor export interop
          var options = typeof scriptExports === 'function' ? scriptExports.options : scriptExports;

          // render functions
          if (render) {
            options.render = render;
            options.staticRenderFns = staticRenderFns;
            options._compiled = true;
          }

          // functional template
          if (functionalTemplate) {
            options.functional = true;
          }

          // scopedId
          if (scopeId) {
            options._scopeId = 'data-v-' + scopeId;
          }
          var hook;
          if (moduleIdentifier) {
            // server build
            hook = function hook(context) {
              // 2.3 injection
              context = context ||
              // cached call
              this.$vnode && this.$vnode.ssrContext ||
              // stateful
              this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext; // functional
              // 2.2 with runInNewContext: true
              if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {
                context = __VUE_SSR_CONTEXT__;
              }
              // inject component styles
              if (injectStyles) {
                injectStyles.call(this, context);
              }
              // register component module identifier for async chunk inference
              if (context && context._registeredComponents) {
                context._registeredComponents.add(moduleIdentifier);
              }
            };
            // used by ssr in case component is cached and beforeCreate
            // never gets called
            options._ssrRegister = hook;
          } else if (injectStyles) {
            hook = shadowMode ? function () {
              injectStyles.call(this, (options.functional ? this.parent : this).$root.$options.shadowRoot);
            } : injectStyles;
          }
          if (hook) {
            if (options.functional) {
              // for template-only hot-reload because in that case the render fn doesn't
              // go through the normalizer
              options._injectStyles = hook;
              // register for functional component in vue file
              var originalRender = options.render;
              options.render = function renderWithStyleInjection(h, context) {
                hook.call(context);
                return originalRender(h, context);
              };
            } else {
              // inject component registration as beforeCreate hook
              var existing = options.beforeCreate;
              options.beforeCreate = existing ? [].concat(existing, hook) : [hook];
            }
          }
          return {
            exports: scriptExports,
            options: options
          };
        }
        var _sfc_main = {
          data: function data() {
            return {
              activeAnchorId: 1,
              navList: [{
                title: '首页',
                anchorId: 1
              }, {
                title: '报名',
                anchorId: 2
              }, {
                title: '活动介绍',
                anchorId: 3
              }, {
                title: '活动安排',
                anchorId: 4
              }, {
                title: '活动话题',
                anchorId: 5
              }, {
                title: '评委介绍',
                anchorId: 6
              }],
              downloadList: [{
                name: '活动声明细则点击下载',
                id: '3',
                url: ''
              }, {
                name: '报名表和作品提交格式下载',
                id: '4',
                url: ''
              }],
              promoters: [{
                name: '吉田 武司',
                id: 1,
                promoter: '活动发起人',
                department: '索尼(中国)有限公司',
                position: '总裁',
                url: __$_require_bc4ca446__
              }, {
                name: '英保 黎',
                id: 2,
                promoter: '活动发起人',
                department: '索尼(中国)有限公司 事业战略室',
                position: '副总裁',
                url: promoter2
              }, {
                name: '吉田 武司',
                id: 3,
                promoter: '学术发起人',
                department: '索尼(中国)有限公司',
                position: '总裁',
                url: empty
              }, {
                name: '英保 黎',
                id: 4,
                promoter: '学术发起人',
                department: '索尼(中国)有限公司 事业战略室',
                position: '副总裁',
                url: empty
              }],
              arranges: [{
                title: '初赛报名',
                id: 1,
                subtitle: '开放',
                date: '2023.11'
              }, {
                title: '初赛作品',
                id: 2,
                subtitle: '提交开放',
                date: '2023.12-2024.03'
              }, {
                title: '线上初赛',
                id: 3,
                subtitle: '作品评选',
                date: '2024.03'
              }, {
                title: '决赛入围',
                id: 4,
                subtitle: '公布和邀请',
                date: '2024.04'
              }, {
                title: '线下决赛',
                id: 5,
                subtitle: '和颁奖',
                date: '2024.05'
              }, {
                title: '获奖',
                id: 6,
                subtitle: '公示',
                date: '2024.06-2024.08'
              }],
              subjects: [{
                title: '潮流科技与屏',
                id: 1,
                subtitle: 'Big Screen',
                thirdtitle: 'for Young Gen’s Lifestyle',
                img: topic1,
                subject: [{
                  title: '用于大屏幕的智能功能与潮流技术',
                  desc: '如何结合ChatGPT，元界，新传感器技术来提高生活体验。'
                }, {
                  title: '针对不同用户社群的大屏定制功能',
                  desc: '如何通过简单、智能、有趣的功能<br/>满足不同群体的需求。<br/>如电影爱好者、游戏爱好者等。'
                }]
              }, {
                title: '耳机',
                id: 2,
                subtitle: 'Headphone& Next Generation、',
                thirdtitle: 'of User Exprience',
                img: topic2,
                subject: [{
                  title: '智能耳机陀螺仪应用开发',
                  desc: '如何使耳机陀螺仪运用到新的程序或场景<br/>耳机陀螺仪基本的数据到进阶数据转化算法开发'
                }, {
                  title: '智能耳机全新交互创想',
                  desc: '新的用户交互<br/>新的耳机形态'
                }]
              }, {
                title: '索尼 & 平台',
                id: 3,
                subtitle: 'Sony’s Online Services',
                thirdtitle: 'for Next Generations',
                img: topic3,
                subject: [{
                  title: '对于内容创建者',
                  desc: '相机后期创作解决方案<br/>MOCOPI 动作捕捉系统创作<br/>空间现实显示屏 SDR 创作'
                }, {
                  title: '对于消费者和粉丝',
                  desc: '索尼生态系统与粉丝社群创想<br/>游戏，音乐，消费类电子，动画等'
                }]
              }],
              works: [{
                title: '专业',
                desc: '工业设计<br/>心理学<br/>社会或人类行为研究<br/>市场研究<br/>商业战略研究<br/>机械产品设计<br/>计算机科学或软件设计<br/>跨领域研究团队<br/>传感器研究团队<br/>媒体交互研究团队如音乐，视频<br/>...'
              }, {
                title: '方向',
                desc: '市场趋势和动向中的痛点或潜在可能性<br/>年轻人喜好和风格<br/>智慧/智能/便捷生活<br/>多媒体创新<br/>互联互通<br/>未来应用场景思考<br/>生态服务创新<br/>新技术<br/>技术新应用<br/>新的解决方案<br/>...'
              }, {
                title: '类型',
                desc: '硬件工业设计作品<br/>交互体验设计作品<br/>软件设计作品<br/>动画影像畅想作品<br/>硬件实体作品，如机器人，<br/>材料，装置，可穿戴等<br/>应用场景设计作品<br/>商业/产品/战略计划作品<br/>...<br/><br/><br/>'
              }],
              prices: [{
                title: '金奖 – Dream Maker',
                data: ['奖金 20000 以及奖杯或奖状', '有机会获得PoC产品原型投资和未来长期孵化合作']
              }, {
                title: '银奖 – Dream Catcher',
                data: ['奖金 10000 以及奖杯或奖状', '有机会获得PoC产品原型投资和未来长期孵化合作']
              }, {
                title: '铜奖 – Dream Pilot',
                data: ['奖金 5000 以及奖杯或奖状', '有机会获得PoC产品原型投资和未来长期孵化合作']
              }],
              otherPrice: [{
                title: '未来发展',
                data: ['索尼中国CEO总裁额外签名认证证书', '索尼高层面对面畅聊', '索尼高层推荐信', '专家、大咖专业化指导及其他创新赋能资源']
              }, {
                title: '其他',
                data: ['索尼中国一日游，体验内部黑科技', '索尼EXPO展览邀请函', '索尼新品体验官资格']
              }],
              otherPrice1: [{
                title: '曝光资源',
                data: ['索尼专访', '公众曝光']
              }],
              otherList: [{
                num: 3,
                title: '潜力奖',
                src: price2,
                list: [{
                  title: '奖金 2500 以及奖状',
                  data: []
                }, {
                  title: '未来发展',
                  data: ['专家、技术大咖专业化指导', '及其他创新赋能资源']
                }],
                list1: [{
                  title: '其他',
                  data: ['索尼EXPO展览邀请函']
                }]
              }, {
                num: 15,
                src: price3,
                title: '入围奖',
                list: [{
                  title: '奖品 奖状',
                  data: []
                }, {
                  title: '未来发展',
                  data: ['专家、技术大咖专业化指导', '及其他创新赋能资源']
                }],
                list1: []
              }],
              judges: [{
                name: '英保 黎',
                id: 1,
                promoter: promoter2,
                department: '索尼(中国)事业战略室',
                position: '副总裁'
              }, {
                name: '竹中 幹雄',
                id: 2,
                promoter: promoter3,
                department: '索尼(中国)研究院',
                position: '院长'
              }, {
                name: '布川 克彦',
                id: 3,
                promoter: promoter4,
                department: '索尼(中国)软件开发中心',
                position: '副总裁'
              }, {
                name: '刘 迎欢',
                id: 4,
                promoter: promoter5,
                department: '索尼(中国)事业战略室',
                position: '总经理'
              }, {
                name: '郑 奇',
                id: 5,
                promoter: promoter6,
                department: '索尼(中国)设计师中心',
                position: '总经理'
              }, {
                name: '川口 元气',
                id: 6,
                promoter: promoter7,
                department: '索尼(中国)个人娱乐企划',
                position: '总监'
              }, {
                name: '伊藤 慎',
                id: 7,
                promoter: promoter8,
                department: '索尼(中国)家庭娱乐企划',
                position: '总监'
              }, {
                name: '',
                id: 8,
                promoter: promoter8,
                department: '',
                position: ''
              }]
            };
          },
          created: function created() {
            if (!isMobile()) {
              window.location.pathname = window.location.pathname.replace('index_m.html', 'index.html');
            }
          },
          mounted: function mounted() {
            var _this2 = this;
            new Swiper('.swiper-container', {
              // 如果需要前进后退按钮
              slidesPerView: 'auto',
              centeredSlides: true,
              spaceBetween: 30,
              navigation: {
                nextEl: '.swiper-button-next',
                prevEl: '.swiper-button-prev'
              }
            });
            new Swiper('.respect-swiper', {
              // 如果需要前进后退按钮
              slidesPerView: 'auto',
              centeredSlides: true,
              spaceBetween: 30,
              navigation: {
                nextEl: '.swiper-button-next',
                prevEl: '.swiper-button-prev'
              }
            });
            var app = document.querySelector('.app-layout');
            setTimeout(function () {
              _this2.onScroll();
            }, 300);
            app.addEventListener('scroll', throttle(this.onScroll, 500, {
              leading: true
            }));
          },
          methods: {
            onGotoAnchor: function onGotoAnchor(id) {
              var app = document.querySelector('.app-layout');
              var containerHeight = document.querySelector('.anchor-container').offsetHeight;
              var target = document.querySelector("[data-anchor=\"".concat(id, "\"]"));
              var top = target.offsetTop - containerHeight + 10;
              app.scrollTo({
                top: top,
                behavior: 'smooth'
              });
            },
            onScroll: function onScroll() {
              var scrollTop = document.querySelector('.app-layout').scrollTop;
              var containerHeight = document.querySelector('.anchor-container').offsetHeight;
              var anchorElTop = Array.from(document.querySelectorAll('[data-anchor]')).map(function (i) {
                return i.offsetTop;
              });
              var currentArea = scrollTop + containerHeight + 240;
              var activeIndex = findLastIndex(anchorElTop, function (t) {
                return currentArea > t;
              });
              if (activeIndex === -1) {
                this.activeAnchorId = 0;
              } else {
                this.activeAnchorId = activeIndex + 1;
              }
            },
            goEdu: function goEdu() {
              var url = 'https://www.sonystyle.com.cn/SSOminisite/promotion/edupurchase_20230706_stu/mobile_index.html?ssid=jtdx_1109';
              sendTagManually('Img_click', {
                img_name: '教育优惠'
              });
              if (isSonyApp()) {
                doAppAction({
                  url: url,
                  title: '教育优惠',
                  linktype: '1'
                });
              } else if (isMiniprogram()) {
                miniprogramNavigateTo(url);
              } else {
                window.location.href = url;
              }
            }
          }
        };
        var _sfc_render = function render() {
          var _vm = this,
            _c = _vm._self._c;
          return _c('div', {
            staticClass: "app-layout tw-max-w-3xl tw-mx-auto",
            attrs: {
              "id": "shjd-page"
            }
          }, [_vm._m(0), _c('div', {
            staticClass: "anchor-container tw-sticky tw-top-0 tw-z-10"
          }, [_c('div', {
            staticClass: "tw-flex tw-flex-wrap tw-justify-center tw-items-center tw-mx-auto tw-py-2"
          }, _vm._l(_vm.navList, function (item) {
            return _c('div', {
              key: item.anchorId,
              staticClass: "tw-w-[28%] tw-text-center tw-text-sm md:tw-text-lg tw-text-zinc-700 tw-py-1",
              class: {
                active: item.anchorId === _vm.activeAnchorId
              },
              on: {
                "click": function click($event) {
                  return _vm.onGotoAnchor(item.anchorId);
                }
              }
            }, [_c('a', {
              staticClass: "tw-scale-90",
              attrs: {
                "href": "#anchor-".concat(item.anchorId)
              },
              on: {
                "click": function click($event) {
                  $event.preventDefault();
                }
              }
            }, [_vm._v(_vm._s(item.title))])]);
          }), 0)]), _c('div', {
            staticClass: "tw-relative tw-pt-12 tw-bg-white",
            attrs: {
              "data-anchor": "2",
              "id": "anchor-2"
            }
          }, [_c('img', {
            staticClass: "tw-absolute tw-w-[18%] tw-left-2 tw-top-4 movedown",
            attrs: {
              "src": __$_require_382dfdfc__
            }
          }), _c('img', {
            staticClass: "tw-absolute tw-right-0 tw-top-0 tw-w-[72%]",
            attrs: {
              "src": __$_require_337b4c9e__,
              "alt": "logo-border"
            }
          }), _c('div', {
            staticClass: "baoming-btn tw-relative tw-w-[44%] md:tw-w-[220px] tw-mx-auto tw-py-2 md:tw-py-4 tw-text-zinc-800 tw-rounded-xl tw-text-[28px] bold tw-text-center"
          }, [_vm._v(" 点击报名 ")]), _c('ul', {
            staticClass: "tw-relative tw-w-[94%] tw-mx-auto tw-mt-10 tw-flex tw-flex-wrap"
          }, _vm._l(_vm.downloadList, function (item) {
            return _c('li', {
              key: item.id,
              staticClass: "tw-text-zinc-700 tw-w-1/2 tw-text-[14px] md:tw-text-lg md:tw-text-center tw-my-1 md:tw-my-4 tw-underline tw-underline-offset-4",
              class: item.id === '4' ? 'tw-tracking-normal' : 'tw-tracking-widest'
            }, [_vm._v(" " + _vm._s(item.name) + " ")]);
          }), 0)]), _c('div', {
            staticClass: "tw-relative tw-pt-6",
            on: {
              "click": function click($event) {
                return _vm.goEdu('Div_click');
              }
            }
          }, [_c('img', {
            attrs: {
              "src": __$_require_411b12ae__,
              "alt": "jiaoyu"
            }
          })]), _c('div', {
            staticClass: "tw-pt-4 tw-bg-white",
            attrs: {
              "data-anchor": "3"
            }
          }, [_vm._m(1), _vm._m(2), _vm._m(3), _c('ul', {
            staticClass: "tw-flex tw-justify-center tw-flex-wrap tw-w-[94%] tw-mx-auto tw-py-12"
          }, _vm._l(_vm.promoters, function (item) {
            return _c('li', {
              key: item.id,
              staticClass: "tw-w-1/2 tw-text-center tw-mb-6"
            }, [_c('img', {
              staticClass: "tw-w-2/3 md:tw-w-1/2 tw-rounded-[50%] tw-mx-auto tw-mb-8",
              attrs: {
                "src": item.url,
                "alt": "发起人"
              }
            }), _c('h4', {
              staticClass: "tw-text-lg bold tw-leading-5 md:tw-text-xl"
            }, [_vm._v(" " + _vm._s(item.promoter) + " ")]), _c('h4', {
              staticClass: "tw-text-lg tw-leading-5 md:tw-text-xl"
            }, [_vm._v(" " + _vm._s(item.name) + " ")]), _c('p', {
              staticClass: "regular tw-text-zinc-700 md:tw-text-lg"
            }, [_vm._v(" " + _vm._s(item.department) + " ")]), _c('p', {
              staticClass: "regular tw-text-zinc-700 md:tw-text-lg"
            }, [_vm._v(" " + _vm._s(item.position) + " ")])]);
          }), 0)]), _c('div', {
            staticClass: "tw-pt-12 global-bg",
            attrs: {
              "data-anchor": "4",
              "id": "anchor-4"
            }
          }, [_vm._m(4), _c('ul', {
            staticClass: "tw-flex tw-justify-center tw-flex-wrap tw-w-[94%] tw-mx-auto"
          }, _vm._l(_vm.arranges, function (item) {
            return _c('li', {
              key: item.id,
              staticClass: "tw-w-1/3 tw-text-center"
            }, [_c('h4', {
              staticClass: "tw-mt-8"
            }, [_c('span', {
              staticClass: "tw-relative tw-inline-block tw-mx-auto tw-text-lg md:tw-text-xl bold"
            }, [_vm._v(" " + _vm._s(item.title) + " "), item.id === 2 ? _c('span', {
              staticClass: "tw-absolute tw-text-[14px] tw-top-0 -tw-right-6 light"
            }, [_vm._v(" 2/3 ")]) : _vm._e()])]), _c('h4', {
              staticClass: "tw-text-lg bold tw-leading-5 md:tw-text-xl"
            }, [_vm._v(" " + _vm._s(item.subtitle) + " ")]), _c('p', {
              staticClass: "tw-mt-2 regular tw-text-zinc-600 md:tw-text-lg"
            }, [_vm._v(" " + _vm._s(item.date) + " ")]), _c('div', {
              staticClass: "tw-relative"
            }, [item.id !== 6 && item.id !== 3 ? _c('div', {
              staticClass: "tw-w-full tw-absolute tw-h-[1px] tw-left-1/2 tw-top-1/2 tw-bg-slate-600"
            }) : _vm._e(), _c('div', {
              staticClass: "tw-w-[20px] tw-relative tw-h-[20px] tw-mx-auto tw-mt-4 tw-rounded-[50%] tw-bg-green-500 tw-border tw-border-slate-600"
            })])]);
          }), 0)]), _c('div', {
            staticClass: "tw-pt-12 global-bg",
            attrs: {
              "data-anchor": "5",
              "id": "anchor-5"
            }
          }, [_c('h4', {
            staticClass: "tw-text-4xl bold"
          }, [_vm._v("活动话题")]), _c('div', {
            staticClass: "swiper-container tw-w-[94%]"
          }, [_c('ul', {
            staticClass: "swiper-wrapper tw-flex tw-justify-between tw-pt-8 tw-pb-8 tw-mx-auto tw-py-20"
          }, _vm._l(_vm.subjects, function (item) {
            return _c('li', {
              key: item.id,
              staticClass: "swiper-slide tw-p-4 tw-text-center topic-bg"
            }, [_c('h4', {
              staticClass: "tw-pt-4 md:tw-pt-8 tw-text-[18px] bold tw-leading-8 md:tw-text-2xl"
            }, [_vm._v(" " + _vm._s(item.title) + " ")]), _c('h4', {
              staticClass: "bold tw-text-zinc-600 md:tw-text-xl"
            }, [_vm._v(" " + _vm._s(item.subtitle) + " ")]), _c('h4', {
              staticClass: "bold tw-text-zinc-600 md:tw-text-xl"
            }, [_vm._v(" " + _vm._s(item.thirdtitle) + " ")]), _c('img', {
              staticClass: "tw-py-2",
              attrs: {
                "src": item.img,
                "alt": ""
              }
            }), _vm._l(item.subject, function (temp, index) {
              return _c('div', {
                key: index,
                staticClass: "tw-mt-4 tw-text-left"
              }, [_c('p', {
                staticClass: "bold md:tw-text-xl"
              }, [_c('span', {
                staticClass: "tw-text-orange-500"
              }, [_vm._v("#")]), _vm._v(" 话题 "), _c('span', [_vm._v(_vm._s(index === 0 ? 'A' : 'B'))])]), _c('p', {
                staticClass: "bold md:tw-text-lg"
              }, [_vm._v(" " + _vm._s(temp.title) + " ")]), _c('p', {
                staticClass: "regular md:tw-text-lg tw-text-zinc-700",
                domProps: {
                  "innerHTML": _vm._s(temp.desc)
                }
              })]);
            })], 2);
          }), 0), _c('div', {
            staticClass: "swiper-button-next"
          }), _c('div', {
            staticClass: "swiper-button-prev"
          })])]), _vm._m(5), _c('div', {
            staticClass: "tw-bg-white tw-pt-12 tw-pb-4"
          }, [_c('h4', {
            staticClass: "tw-text-4xl bold"
          }, [_vm._v("期待作品")]), _c('div', {
            staticClass: "swiper-container tw-w-[94%] respect-swiper"
          }, [_c('ul', {
            staticClass: "swiper-wrapper tw-pt-12 tw-flex tw-justify-between tw-w-3/4 tw-mx-auto"
          }, _vm._l(_vm.works, function (item) {
            return _c('li', {
              key: item.id,
              staticClass: "swiper-slide tw-text-center tw-border tw-border-slate-900 global-bg"
            }, [_c('div', {
              staticClass: "tw-relative tw-py-4 tw-px-2 tw-border tw-border-slate-900 -tw-left-[7px] -tw-top-[7px] global-bg"
            }, [_c('h4', {
              staticClass: "tw-text-[16px] bold tw-py-4 md:tw-text-2xl"
            }, [_vm._v(" " + _vm._s(item.title) + " ")]), _c('p', {
              staticClass: "regular tw-text-zinc-700 md:tw-text-lg",
              domProps: {
                "innerHTML": _vm._s(item.desc)
              }
            })])]);
          }), 0), _c('div', {
            staticClass: "swiper-button-next"
          }), _c('div', {
            staticClass: "swiper-button-prev"
          })])]), _c('div', {
            staticClass: "tw-pt-12 tw-pb-16 tw-bg-white"
          }, [_c('div', {
            staticClass: "tw-w-[94%] tw-mx-auto"
          }, [_c('h4', {
            staticClass: "tw-text-4xl bold"
          }, [_vm._v("奖项设置")]), _c('div', {
            staticClass: "tw-mt-8 tw-p-4 border-settop"
          }, _vm._l(_vm.prices, function (item, index) {
            return _c('div', {
              key: index
            }, [_c('div', {
              staticClass: "tw-flex tw-items-center tw-py-2"
            }, [_vm._m(6, true), _c('h4', {
              staticClass: "tw-text-lg bold tw-ml-2 md:tw-text-2xl"
            }, [_vm._v(" " + _vm._s(item.title) + " ")])]), _vm._l(item.data, function (temp, index) {
              return _c('p', {
                key: index,
                staticClass: "regular"
              }, [_c('span', {
                staticClass: "tw-inline-block tw-px-2 tw-text-zinc-800 lg:tw-text-base md:tw-text-[14px]",
                class: index === 0 ? 'tw-border tw-border-zinc-500 bold' : ''
              }, [_vm._v(" " + _vm._s(temp) + " ")])]);
            })], 2);
          }), 0), _c('div', {
            staticClass: "tw-relative tw-p-4 border-setbottom"
          }, [_c('img', {
            staticClass: "tw-absolute tw-w-1/4 tw-right-[15%] tw-bottom-0 md:tw-right-[8%] md:-tw-bottom-4 moveup",
            attrs: {
              "src": __$_require_a44abdb2__,
              "alt": "music"
            }
          }), _c('h4', {
            staticClass: "tw-text-xl bold tw-pt-4 tw-text-left"
          }, [_vm._v(" 金, 银，铜奖其他奖项 ")]), _c('div', {
            staticClass: "tw-flex tw-pt-2"
          }, [_c('ul', _vm._l(_vm.otherPrice, function (item) {
            return _c('li', {
              key: item.title,
              staticClass: "tw-pb-4"
            }, [_c('h4', {
              staticClass: "tw-inline-block tw-border tw-border-zinc-500 tw-px-2 bold lg:tw-text-base md:tw-text-[14px]"
            }, [_vm._v(" " + _vm._s(item.title) + " ")]), _vm._l(item.data, function (temp, index) {
              return _c('p', {
                key: index,
                staticClass: "regular tw-text-zinc-800 lg:tw-text-base md:tw-text-[14px]"
              }, [_vm._v(" " + _vm._s(temp) + " ")]);
            })], 2);
          }), 0), _c('ul', _vm._l(_vm.otherPrice1, function (item) {
            return _c('li', {
              key: item.title,
              staticClass: "tw-p-2 tw-text-center"
            }, [_c('h4', {
              staticClass: "tw-inline-block tw-border tw-border-zinc-500 tw-px-2 bold lg:tw-text-base md:tw-text-[14px]"
            }, [_vm._v(" " + _vm._s(item.title) + " ")]), _vm._l(item.data, function (temp, index) {
              return _c('p', {
                key: index,
                staticClass: "regular tw-text-zinc-800 lg:tw-text-base md:tw-text-[14px]"
              }, [_vm._v(" " + _vm._s(temp) + " ")]);
            })], 2);
          }), 0)])]), _vm._l(_vm.otherList, function (item, index) {
            return _c('div', {
              key: index,
              staticClass: "tw-relative lg:tw-w-[43%] md:tw-w-[42%] tw-mt-6 tw-p-6 tw-border tw-border-slate-900 tw-rounded-e-full"
            }, [_c('img', {
              staticClass: "tw-absolute tw-w-1/5 tw-right-12 tw-bottom-0 movedown",
              attrs: {
                "src": item.src,
                "alt": "yinjiang-erji"
              }
            }), _c('div', {
              staticClass: "tw-flex tw-items-center"
            }, [_c('div', {
              staticClass: "tw-border tw-rounded-full tw-text-center tw-py-2 tw-px-4 tw-border-slate-900 bold",
              class: index === 0 ? 'tw-bg-violet-300' : 'tw-bg-orange-500'
            }, [_c('p', {
              staticClass: "tw-text-lg tw-leading-6 bold"
            }, [_vm._v(_vm._s(item.num) + " Teams")])]), _c('h4', {
              staticClass: "tw-text-lg bold tw-ml-2 md:tw-text-2xl"
            }, [_vm._v(" " + _vm._s(item.title) + " ")])]), _c('div', {
              staticClass: "tw-flex tw-pt-8 tw-justify-between"
            }, [_c('ul', _vm._l(item.list, function (temp, index) {
              return _c('li', {
                key: index,
                staticClass: "lg:tw-text-lg md:tw-text-[16px] light lg:tw-leading-8",
                class: index === 0 ? 'tw-pb-12' : ''
              }, [_c('h4', {
                staticClass: "tw-inline-block tw-border tw-border-zinc-500 tw-px-2 bold lg:tw-text-base md:tw-text-[14px]"
              }, [_vm._v(" " + _vm._s(temp.title) + " ")]), _vm._l(temp.data, function (data, index) {
                return _c('p', {
                  key: index,
                  staticClass: "regular tw-text-zinc-800 lg:tw-text-base md:tw-text-[14px]"
                }, [_vm._v(" " + _vm._s(data) + " ")]);
              })], 2);
            }), 0), _c('ul', _vm._l(item.list1, function (temp, index) {
              return _c('li', {
                key: index,
                staticClass: "lg:tw-text-lg md:tw-text-[16px] light lg:tw-leading-8",
                class: index === 0 ? 'tw-pb-12' : ''
              }, [_c('h4', {
                staticClass: "tw-inline-block tw-border tw-border-zinc-500 tw-px-2 bold lg:tw-text-base md:tw-text-[14px]"
              }, [_vm._v(" " + _vm._s(temp.title) + " ")]), _vm._l(temp.data, function (data, index) {
                return _c('p', {
                  key: index,
                  staticClass: "regular tw-text-zinc-800 lg:tw-text-base md:tw-text-[14px]"
                }, [_vm._v(" " + _vm._s(data) + " ")]);
              })], 2);
            }), 0)])]);
          })], 2)]), _c('div', {
            staticClass: "tw-relative tw-pt-12 global-bg",
            attrs: {
              "data-anchor": "6",
              "id": "anchor-6"
            }
          }, [_c('img', {
            staticClass: "tw-absolute tw-w-[30%] tw-right-8 tw-bottom-4 movedown",
            attrs: {
              "src": __$_require_6e67d7b4__,
              "alt": "pingwei-erji"
            }
          }), _c('h4', {
            staticClass: "tw-text-4xl bold"
          }, [_vm._v("评委团")]), _vm._m(7), _c('ul', {
            staticClass: "tw-flex tw-w-[94%] tw-flex-wrap tw-justify-evenly tw-items-center tw-mb-12"
          }, _vm._l(_vm.judges, function (item) {
            return _c('li', {
              key: item.id,
              staticClass: "tw-w-1/2 tw-pb-6 tw-text-center"
            }, [item.id !== 8 ? _c('img', {
              staticClass: "tw-rounded-[50%] tw-mx-auto tw-w-3/5",
              attrs: {
                "src": item.promoter,
                "alt": "发起人"
              }
            }) : _vm._e(), _c('p', {
              staticClass: "tw-text-[16px] bold tw-text-zinc-600"
            }, [_vm._v(" " + _vm._s(item.name) + " ")]), _c('p', {
              staticClass: "regular tw-text-zinc-600"
            }, [_vm._v(" " + _vm._s(item.department) + " ")]), _c('p', {
              staticClass: "regular tw-text-zinc-600"
            }, [_vm._v(" " + _vm._s(item.position) + " ")])]);
          }), 0)]), _vm._m(8), _vm._m(9)]);
        };
        var _sfc_staticRenderFns = [function () {
          var _vm = this,
            _c = _vm._self._c;
          return _c('div', {
            attrs: {
              "data-anchor": "1",
              "id": "anchor-1"
            }
          }, [_c('div', {
            staticClass: "tw-relative sound-bar-kv tw-w-full"
          }, [_c('img', {
            staticClass: "tw-w-full",
            attrs: {
              "src": __$_require_08c9c4f2__,
              "alt": "KV"
            }
          }), _c('img', {
            staticClass: "tw-absolute tw-w-[11vw] tw-left-[34%] tw-bottom-[18%] moveup",
            attrs: {
              "src": __$_require_45a1f8b8__,
              "alt": "kv-icon"
            }
          }), _c('img', {
            staticClass: "tw-absolute tw-w-[12vw] tw-right-[30%] tw-bottom-[24%] movedown",
            attrs: {
              "src": __$_require_45ce1a91__,
              "alt": "kv-icon"
            }
          }), _c('img', {
            staticClass: "tw-absolute tw-w-[10vw] tw-right-[23%] tw-bottom-[10%] moveup",
            attrs: {
              "src": __$_require_718bc11e__,
              "alt": "kv-icon"
            }
          }), _c('img', {
            staticClass: "tw-absolute tw-w-[8vw] tw-right-[15%] tw-bottom-[27%] movedown",
            attrs: {
              "src": __$_require_0e59efc4__,
              "alt": "kv-icon"
            }
          }), _c('img', {
            staticClass: "tw-absolute tw-w-[8vw] tw-right-[5%] tw-bottom-[10%] moveup",
            attrs: {
              "src": __$_require_d5d0a21c__,
              "alt": "kv-icon"
            }
          })])]);
        }, function () {
          var _vm = this,
            _c = _vm._self._c;
          return _c('div', {
            staticClass: "tw-w-[94%] tw-relative tw-mx-auto tw-mt-6 tw-text-4xl bold"
          }, [_c('img', {
            staticClass: "tw-absolute tw-w-[120px] tw-left-1/2 md:tw-left-1/3 tw-bottom-0",
            attrs: {
              "src": __$_require_3def530c__
            }
          }), _c('h4', {
            staticClass: "tw-relative tw-text-left bold"
          }, [_vm._v(" “企”梦索尼， "), _c('br'), _vm._v(" 携梦与索尼同行 ")]), _c('h4', {
            staticClass: "tw-relative tw-text-left tw-text-4xl bold"
          }, [_vm._v(" Start Your Dream "), _c('br'), _vm._v(" With Sony ")])]);
        }, function () {
          var _vm = this,
            _c = _vm._self._c;
          return _c('div', {
            staticClass: "tw-w-[94%] tw-mx-auto tw-mt-8"
          }, [_c('img', {
            staticClass: "tw-mx-auto tw-mb-8",
            attrs: {
              "src": "https://fakeimg.pl/1200x500",
              "alt": "首页"
            }
          }), _c('h4', {
            staticClass: "tw-text-base tw-text-left bold tw-pb-2 md:tw-text-xl"
          }, [_vm._v(" 索尼于1946年， "), _c('br'), _vm._v("为了建立一个轻松自由愉快的理想工厂而成立 ")]), _c('p', {
            staticClass: "regular tw-text-base tw-text-zinc-700 md:tw-text-xl"
          }, [_vm._v(" 秉承着用创意和科技的力量感动世界的企业宗旨，"), _c('br'), _vm._v(" 在过去数十年中，索尼在游戏，音乐，影视消费类电子，动画等行业均有业务； 也包括其他新型的业务如动作捕捉系统Mocopi，空间现实显示屏等 ")]), _c('img', {
            staticClass: "tw-mx-auto tw-my-6",
            attrs: {
              "src": __$_require_0a91f887__,
              "alt": "logo"
            }
          }), _c('p', {
            staticClass: "regular tw-text-base tw-text-zinc-700 md:tw-text-xl"
          }, [_vm._v(" 索尼相信，年轻人在未来将会是引领潮流的重要群体之一。 因此我们希望索尼的产品/服务在未来可以更加契合当代年轻人的喜好与风格 ")])]);
        }, function () {
          var _vm = this,
            _c = _vm._self._c;
          return _c('div', {
            staticClass: "tw-relative tw-mt-12 global-bg tw-pt-8 tw-pb-24 tw-overflow-hidden"
          }, [_c('div', {
            staticClass: "tw-w-[94%] tw-mx-auto md:tw-py-8"
          }, [_c('h4', {
            staticClass: "tw-text-lg bold tw-text-left md:tw-text-2xl"
          }, [_vm._v(" 索尼 未来畅想 \"Sony & The Future\" ")]), _c('h4', {
            staticClass: "tw-text-lg bold tw-text-left tw-pb-2 md:tw-text-2xl"
          }, [_vm._v(" 大学生创想大赛 ")]), _c('p', {
            staticClass: "regular tw-text-zinc-700 md:tw-text-lg"
          }, [_vm._v(" 期待能帮助拥有创意和憧憬的你，带着梦想和好奇心去开拓未来 ")]), _c('p', {
            staticClass: "regular tw-text-zinc-700 md:tw-text-lg"
          }, [_vm._v(" 年轻创作者们，请展示自己的创想和对未来的思考 ")]), _c('p', {
            staticClass: "regular tw-text-zinc-700 md:tw-text-lg"
          }, [_vm._v(" 让我们携手一起去体会科技与创想的魅力 ")]), _c('img', {
            staticClass: "tw-absolute tw-w-[58%] tw-right-0 tw-bottom-0",
            attrs: {
              "src": __$_require_23200d24__,
              "alt": "orange"
            }
          })])]);
        }, function () {
          var _vm = this,
            _c = _vm._self._c;
          return _c('h4', {
            staticClass: "tw-text-center"
          }, [_c('span', {
            staticClass: "tw-relative tw-inline-block tw-mx-auto tw-text-4xl bold"
          }, [_vm._v(" 活动安排 "), _c('span', {
            staticClass: "tw-absolute tw-text-lg tw-top-0 -tw-right-3 light"
          }, [_vm._v(" 1 ")])])]);
        }, function () {
          var _vm = this,
            _c = _vm._self._c;
          return _c('div', {
            staticClass: "tw-pt-12 tw-bg-white"
          }, [_c('h4', {
            staticClass: "tw-text-center"
          }, [_c('span', {
            staticClass: "tw-relative tw-inline-block tw-mx-auto tw-text-4xl bold"
          }, [_vm._v(" 评审标准 "), _c('span', {
            staticClass: "tw-absolute tw-text-lg tw-top-0 -tw-right-3 light"
          }, [_vm._v(" 4 ")])])]), _c('img', {
            attrs: {
              "src": __$_require_1c9844bc__,
              "alt": "pingshen"
            }
          })]);
        }, function () {
          var _vm = this,
            _c = _vm._self._c;
          return _c('div', {
            staticClass: "tw-border tw-rounded-full tw-text-center tw-py-1 tw-px-4 tw-border-slate-900 regular tw-bg-green-500"
          }, [_c('p', {
            staticClass: "tw-text-lg tw-leading-6"
          }, [_vm._v("1 Teams")])]);
        }, function () {
          var _vm = this,
            _c = _vm._self._c;
          return _c('div', {
            staticClass: "tw-w-[94%] tw-mt-8 tw-mx-auto tw-flex tw-justify-center"
          }, [_c('ul', {
            staticClass: "tw-flex tw-justify-center tw-items-center"
          }, [_c('li', {
            staticClass: "tw-w-[30%] md:tw-w-1/2 tw-text-center"
          }, [_c('img', {
            staticClass: "tw-rounded-[50%] tw-mx-auto",
            attrs: {
              "src": __$_require_bc4ca446__,
              "alt": "发起人"
            }
          }), _c('p', {
            staticClass: "tw-text-[16px] bold tw-text-zinc-600"
          }, [_vm._v("吉田 武司")]), _c('p', {
            staticClass: "tw-text-zinc-600"
          }, [_vm._v("索尼(中国)有限公司")]), _c('p', {
            staticClass: "regular tw-text-zinc-600"
          }, [_vm._v("总裁")])])])]);
        }, function () {
          var _vm = this,
            _c = _vm._self._c;
          return _c('div', {
            staticClass: "tw-bg-white tw-pb-12"
          }, [_c('div', {
            staticClass: "tw-relative tw-scale-90"
          }, [_c('p', {
            staticClass: "lg:tw-text-xs light tw-text-zinc-600 tw-leading-5"
          }, [_vm._v(" 1. 活动的安排如有变动，请以官方实际安排和告知为准 ")]), _c('p', {
            staticClass: "lg:tw-text-xs light tw-text-zinc-600 tw-leading-5"
          }, [_vm._v(" 2. 参赛者在本活动过程中独立产生的知识产权，包括但不限于在中国大陆地区内的专利权（含发明、实用新型和外观设计）以及专利申请权、商标权、著作权、技术秘密（know-how）及相关法律法规规定的全部权利（包括今后因法律法规的修改所赋予的权利，下同）以及其他一切知识产权均归参赛者享有；尽管有上述规定，参赛者许可索尼和/或其关联公司以及上述主体参股或控股的公司在内主体在全世界范围内永久且免费地、不受次数限制地、可转授权地、可分许可地进行盈利性和/或非盈利性的使用，且参赛者同意索尼和/或其关联公司以及上述主体参股或控股的公司在内主体就该等知识产权享有优先购买权。 ")]), _c('p', {
            staticClass: "lg:tw-text-xs light tw-text-zinc-600 tw-leading-5"
          }, [_vm._v(" 3. 避免疑义，“本活动过程中”指从活动报名至本活动结束之日止。“本活动过程中独立产生的知识产权”包括但不限于本活动的主题、参赛者的选题以及技术方案等所有与本活动有关联的知识产权和参賽作品 ")]), _c('p', {
            staticClass: "lg:tw-text-xs light tw-text-zinc-600 tw-leading-5"
          }, [_vm._v(" 4. 评审标准的打分细则请参考【活动声明与细则】文档 ")])])]);
        }, function () {
          var _vm = this,
            _c = _vm._self._c;
          return _c('div', {
            staticClass: "tw-py-12 global-bg"
          }, [_c('div', {
            staticClass: "tw-w-[94%] tw-ml-[13%] tw-flex tw-justify-center"
          }, [_c('ul', {
            staticClass: "tw-flex-1"
          }, [_c('li', [_c('h4', {
            staticClass: "tw-text-lg bold tw-text-left tw-text-zinc-700 tw-leading-8"
          }, [_vm._v(" 主办单位 ")]), _c('p', {
            staticClass: "regular tw-text-zinc-600"
          }, [_vm._v("索尼（中国）有限公司")])]), _c('li', {
            staticClass: "tw-pt-4"
          }, [_c('h4', {
            staticClass: "tw-text-lg bold tw-text-left tw-text-zinc-700 tw-leading-10"
          }, [_vm._v(" 承办单位 ")]), _c('p', {
            staticClass: "regular tw-text-zinc-600"
          }, [_vm._v("匠技新（上海）孵化器")]), _c('p', {
            staticClass: "regular tw-text-zinc-600"
          }, [_vm._v("管理有限公司")])]), _c('li', {
            staticClass: "tw-pt-4"
          }, [_c('img', {
            staticClass: "tw-w-[90%]",
            attrs: {
              "src": __$_require_7d9f27f4__,
              "alt": "contact"
            }
          })])]), _c('ul', {
            staticClass: "tw-flex-1"
          }, [_c('li', [_c('h4', {
            staticClass: "tw-text-lg bold tw-text-left tw-text-zinc-700"
          }, [_vm._v(" 协办单位 ")]), _c('p', {
            staticClass: "regular tw-text-zinc-600"
          }, [_vm._v("上海交通大学")])]), _c('li', {
            staticClass: "tw-pt-4 tw-mx-auto"
          }, [_c('h4', {
            staticClass: "tw-text-lg bold tw-text-left tw-text-zinc-700 tw-leading-10"
          }, [_vm._v(" 支持单位 ")]), _c('p', {
            staticClass: "regular tw-text-zinc-600"
          }, [_vm._v("复旦大学")]), _c('p', {
            staticClass: "regular tw-text-zinc-600"
          }, [_vm._v("同济大学")]), _c('p', {
            staticClass: "regular tw-text-zinc-600"
          }, [_vm._v("上海大学")]), _c('p', {
            staticClass: "regular tw-text-zinc-600"
          }, [_vm._v("长三角高校合作联盟")]), _c('p', {
            staticClass: "regular tw-text-zinc-600"
          }, [_vm._v("（排名无先后）")])]), _c('li', {
            staticClass: "tw-pt-4 tw-text-lg bold tw-text-zinc-600"
          }, [_vm._v("咨询与联系")]), _c('li', {
            staticClass: "tw-text-zinc-500 regular"
          }, [_vm._v("scnics@sony.com")])])])]);
        }];
        var __component__ = /*#__PURE__*/normalizeComponent(_sfc_main, _sfc_render, _sfc_staticRenderFns, false, null, "277fcd07", null, null);
        var App = __component__.exports;
        var Vue = window['Vue'];
        new Vue({
          render: function render(h) {
            return h(App);
          }
        }).$mount('#app');
      }
    };
  });
})();
